feat: add nvimdots
This commit is contained in:
@@ -0,0 +1,152 @@
|
||||
-- Now use `<A-o>` or `<A-1>` to back to the `dotstutor`.
|
||||
local autocmd = {}
|
||||
|
||||
function autocmd.nvim_create_augroups(definitions)
|
||||
for group_name, definition in pairs(definitions) do
|
||||
-- Prepend an underscore to avoid name clashes
|
||||
vim.api.nvim_command("augroup _" .. group_name)
|
||||
vim.api.nvim_command("autocmd!")
|
||||
for _, def in ipairs(definition) do
|
||||
local command = table.concat(vim.iter({ "autocmd", def }):flatten(math.huge):totable(), " ")
|
||||
vim.api.nvim_command(command)
|
||||
end
|
||||
vim.api.nvim_command("augroup END")
|
||||
end
|
||||
end
|
||||
|
||||
-- Hold off on configuring anything related to the LSP until LspAttach
|
||||
local mapping = require("keymap.completion")
|
||||
vim.api.nvim_create_autocmd("LspAttach", {
|
||||
group = vim.api.nvim_create_augroup("LspKeymapLoader", { clear = true }),
|
||||
callback = function(event)
|
||||
if not _G._debugging then
|
||||
-- LSP Keymaps
|
||||
mapping.lsp(event.buf)
|
||||
|
||||
-- LSP Inlay Hints
|
||||
local inlayhints_enabled = require("core.settings").lsp_inlayhints
|
||||
local client = vim.lsp.get_client_by_id(event.data.client_id)
|
||||
if client and client.server_capabilities.inlayHintProvider ~= nil then
|
||||
vim.lsp.inlay_hint.enable(inlayhints_enabled == true, { bufnr = event.buf })
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
-- auto close NvimTree
|
||||
vim.api.nvim_create_autocmd("BufEnter", {
|
||||
group = vim.api.nvim_create_augroup("NvimTreeClose", { clear = true }),
|
||||
pattern = "NvimTree_*",
|
||||
callback = function()
|
||||
local layout = vim.api.nvim_call_function("winlayout", {})
|
||||
if
|
||||
layout[1] == "leaf"
|
||||
and vim.bo[vim.api.nvim_win_get_buf(layout[2])].filetype == "NvimTree"
|
||||
and layout[3] == nil
|
||||
then
|
||||
vim.api.nvim_command([[confirm quit]])
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
-- auto close some filetype with <q>
|
||||
vim.api.nvim_create_autocmd("FileType", {
|
||||
pattern = {
|
||||
"qf",
|
||||
"help",
|
||||
"man",
|
||||
"notify",
|
||||
"nofile",
|
||||
"lspinfo",
|
||||
"terminal",
|
||||
"prompt",
|
||||
"toggleterm",
|
||||
"copilot",
|
||||
"startuptime",
|
||||
"tsplayground",
|
||||
"PlenaryTestPopup",
|
||||
},
|
||||
callback = function(event)
|
||||
vim.bo[event.buf].buflisted = false
|
||||
vim.api.nvim_buf_set_keymap(event.buf, "n", "q", "<Cmd>close<CR>", { silent = true })
|
||||
end,
|
||||
})
|
||||
|
||||
function autocmd.load_autocmds()
|
||||
local definitions = {
|
||||
lazy = {},
|
||||
bufs = {
|
||||
-- Reload vim config automatically
|
||||
{
|
||||
"BufWritePost",
|
||||
[[$VIM_PATH/{*.vim,*.yaml,vimrc} nested source $MYVIMRC | redraw]],
|
||||
},
|
||||
-- Reload Vim script automatically if setlocal autoread
|
||||
{
|
||||
"BufWritePost,FileWritePost",
|
||||
"*.vim",
|
||||
[[nested if &l:autoread > 0 | source <afile> | echo 'source ' . bufname('%') | endif]],
|
||||
},
|
||||
{ "BufWritePre", "/tmp/*", "setlocal noundofile" },
|
||||
{ "BufWritePre", "COMMIT_EDITMSG", "setlocal noundofile" },
|
||||
{ "BufWritePre", "MERGE_MSG", "setlocal noundofile" },
|
||||
{ "BufWritePre", "*.tmp", "setlocal noundofile" },
|
||||
{ "BufWritePre", "*.bak", "setlocal noundofile" },
|
||||
-- auto place to last edit
|
||||
{
|
||||
"BufReadPost",
|
||||
"*",
|
||||
[[if line("'\"") > 1 && line("'\"") <= line("$") | execute "normal! g'\"" | endif]],
|
||||
},
|
||||
-- Auto toggle fcitx5
|
||||
-- {"InsertLeave", "* :silent", "!fcitx5-remote -c"},
|
||||
-- {"BufCreate", "*", ":silent !fcitx5-remote -c"},
|
||||
-- {"BufEnter", "*", ":silent !fcitx5-remote -c "},
|
||||
-- {"BufLeave", "*", ":silent !fcitx5-remote -c "}
|
||||
},
|
||||
wins = {
|
||||
-- Highlight current line only on focused window
|
||||
{
|
||||
"WinEnter,BufEnter,InsertLeave",
|
||||
"*",
|
||||
[[if ! &cursorline && &filetype !~# '^\(dashboard\|clap_\)' && ! &pvw | setlocal cursorline | endif]],
|
||||
},
|
||||
{
|
||||
"WinLeave,BufLeave,InsertEnter",
|
||||
"*",
|
||||
[[if &cursorline && &filetype !~# '^\(dashboard\|clap_\)' && ! &pvw | setlocal nocursorline | endif]],
|
||||
},
|
||||
-- Attempt to write shada when leaving nvim
|
||||
{
|
||||
"VimLeave",
|
||||
"*",
|
||||
[[if has('nvim') | wshada | else | wviminfo! | endif]],
|
||||
},
|
||||
-- Check if file changed when its window is focus, more eager than 'autoread'
|
||||
{ "FocusGained", "* checktime" },
|
||||
-- Equalize window dimensions when resizing vim window
|
||||
{ "VimResized", "*", [[tabdo wincmd =]] },
|
||||
},
|
||||
ft = {
|
||||
{ "FileType", "*", "setlocal formatoptions-=cro" },
|
||||
{ "FileType", "alpha", "setlocal showtabline=0" },
|
||||
{ "FileType", "markdown", "setlocal wrap" },
|
||||
{ "FileType", "dap-repl", "lua require('dap.ext.autocompl').attach()" },
|
||||
{
|
||||
"FileType",
|
||||
"c,cpp",
|
||||
"nnoremap <leader>h :ClangdSwitchSourceHeaderVSplit<CR>",
|
||||
},
|
||||
},
|
||||
yank = {
|
||||
{
|
||||
"TextYankPost",
|
||||
"*",
|
||||
[[silent! lua vim.highlight.on_yank({higroup="IncSearch", timeout=300})]],
|
||||
},
|
||||
},
|
||||
}
|
||||
autocmd.nvim_create_augroups(require("modules.utils").extend_config(definitions, "user.event"))
|
||||
end
|
||||
|
||||
autocmd.load_autocmds()
|
||||
@@ -0,0 +1,18 @@
|
||||
local global = {}
|
||||
local os_name = vim.uv.os_uname().sysname
|
||||
|
||||
function global:load_variables()
|
||||
self.is_mac = os_name == "Darwin"
|
||||
self.is_linux = os_name == "Linux"
|
||||
self.is_windows = os_name == "Windows_NT"
|
||||
self.is_wsl = vim.fn.has("wsl") == 1
|
||||
self.vim_path = vim.fn.stdpath("config")
|
||||
self.cache_dir = vim.fn.stdpath("cache")
|
||||
self.data_dir = string.format("%s/site/", vim.fn.stdpath("data"))
|
||||
self.modules_dir = self.vim_path .. "/modules"
|
||||
self.home = self.is_windows and os.getenv("USERPROFILE") or os.getenv("HOME")
|
||||
end
|
||||
|
||||
global:load_variables()
|
||||
|
||||
return global
|
||||
@@ -0,0 +1,169 @@
|
||||
local settings = require("core.settings")
|
||||
local global = require("core.global")
|
||||
|
||||
-- Create cache dir and data dirs
|
||||
local createdir = function()
|
||||
local data_dirs = {
|
||||
global.cache_dir .. "/backup",
|
||||
global.cache_dir .. "/session",
|
||||
global.cache_dir .. "/swap",
|
||||
global.cache_dir .. "/tags",
|
||||
global.cache_dir .. "/undo",
|
||||
}
|
||||
-- Only check whether cache_dir exists, this would be enough.
|
||||
if vim.fn.isdirectory(global.cache_dir) == 0 then
|
||||
---@diagnostic disable-next-line: param-type-mismatch
|
||||
vim.fn.mkdir(global.cache_dir, "p")
|
||||
for _, dir in pairs(data_dirs) do
|
||||
if vim.fn.isdirectory(dir) == 0 then
|
||||
vim.fn.mkdir(dir, "p")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local disable_distribution_plugins = function()
|
||||
-- Disable menu loading
|
||||
vim.g.did_install_default_menus = 1
|
||||
vim.g.did_install_syntax_menu = 1
|
||||
|
||||
-- Comment this if you define your own filetypes in `after/ftplugin`
|
||||
-- vim.g.did_load_filetypes = 1
|
||||
|
||||
-- Do not load native syntax completion
|
||||
vim.g.loaded_syntax_completion = 1
|
||||
|
||||
-- Do not load spell files
|
||||
vim.g.loaded_spellfile_plugin = 1
|
||||
|
||||
-- Whether to load netrw by default
|
||||
-- vim.g.loaded_netrw = 1
|
||||
-- vim.g.loaded_netrwFileHandlers = 1
|
||||
-- vim.g.loaded_netrwPlugin = 1
|
||||
-- vim.g.loaded_netrwSettings = 1
|
||||
-- newtrw liststyle: https://medium.com/usevim/the-netrw-style-options-3ebe91d42456
|
||||
vim.g.netrw_liststyle = 3
|
||||
|
||||
-- Do not load tohtml.vim
|
||||
vim.g.loaded_2html_plugin = 1
|
||||
|
||||
-- Do not load zipPlugin.vim, gzip.vim and tarPlugin.vim (all of these plugins are
|
||||
-- related to reading files inside compressed containers)
|
||||
vim.g.loaded_gzip = 1
|
||||
vim.g.loaded_tar = 1
|
||||
vim.g.loaded_tarPlugin = 1
|
||||
vim.g.loaded_vimball = 1
|
||||
vim.g.loaded_vimballPlugin = 1
|
||||
vim.g.loaded_zip = 1
|
||||
vim.g.loaded_zipPlugin = 1
|
||||
|
||||
-- Do not use builtin matchit.vim and matchparen.vim because we're using vim-matchup
|
||||
vim.g.loaded_matchit = 1
|
||||
vim.g.loaded_matchparen = 1
|
||||
|
||||
-- Disable sql omni completion
|
||||
vim.g.loaded_sql_completion = 1
|
||||
|
||||
-- Set this to 0 in order to disable native EditorConfig support
|
||||
vim.g.editorconfig = 1
|
||||
|
||||
-- Disable remote plugins
|
||||
-- NOTE:
|
||||
-- > Disabling rplugin.vim will make `wilder.nvim` complain about missing rplugins during :checkhealth,
|
||||
-- > but since it's config doesn't require python rtp (strictly), it's fine to ignore that for now.
|
||||
-- vim.g.loaded_remote_plugins = 1
|
||||
end
|
||||
|
||||
local leader_map = function()
|
||||
vim.g.mapleader = " "
|
||||
-- NOTE:
|
||||
-- > Uncomment the following if you're using a <leader> other than <Space>, and you wish
|
||||
-- > to disable advancing one character by pressing <Space> in normal/visual mode.
|
||||
-- vim.api.nvim_set_keymap("n", " ", "", { noremap = true })
|
||||
-- vim.api.nvim_set_keymap("x", " ", "", { noremap = true })
|
||||
end
|
||||
|
||||
local gui_config = function()
|
||||
vim.api.nvim_set_option_value("guifont", settings.gui_config.font_name .. ":h" .. settings.gui_config.font_size, {})
|
||||
end
|
||||
|
||||
local neovide_config = function()
|
||||
for name, config in pairs(settings.neovide_config) do
|
||||
vim.g["neovide_" .. name] = config
|
||||
end
|
||||
end
|
||||
|
||||
local clipboard_config = function()
|
||||
if global.is_mac then
|
||||
vim.g.clipboard = {
|
||||
name = "macOS-clipboard",
|
||||
copy = { ["+"] = "pbcopy", ["*"] = "pbcopy" },
|
||||
paste = { ["+"] = "pbpaste", ["*"] = "pbpaste" },
|
||||
cache_enabled = 0,
|
||||
}
|
||||
elseif global.is_wsl then
|
||||
vim.g.clipboard = {
|
||||
name = "win32yank-wsl",
|
||||
copy = {
|
||||
["+"] = "win32yank.exe -i --crlf",
|
||||
["*"] = "win32yank.exe -i --crlf",
|
||||
},
|
||||
paste = {
|
||||
["+"] = "win32yank.exe -o --lf",
|
||||
["*"] = "win32yank.exe -o --lf",
|
||||
},
|
||||
cache_enabled = 0,
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
local shell_config = function()
|
||||
if global.is_windows then
|
||||
if not (vim.fn.executable("pwsh") == 1 or vim.fn.executable("powershell") == 1) then
|
||||
vim.notify(
|
||||
[[
|
||||
Failed to setup terminal config
|
||||
|
||||
PowerShell is either not installed, missing from PATH, or not executable;
|
||||
cmd.exe will be used instead for `:!` (shell bang) and toggleterm.nvim.
|
||||
|
||||
You're recommended to install PowerShell for better experience.]],
|
||||
vim.log.levels.WARN,
|
||||
{ title = "[core] Runtime Warning" }
|
||||
)
|
||||
return
|
||||
end
|
||||
|
||||
local basecmd = "-NoLogo -MTA -ExecutionPolicy RemoteSigned"
|
||||
local ctrlcmd = "-Command [console]::InputEncoding = [console]::OutputEncoding = [System.Text.Encoding]::UTF8"
|
||||
local set_opts = vim.api.nvim_set_option_value
|
||||
set_opts("shell", vim.fn.executable("pwsh") == 1 and "pwsh" or "powershell", {})
|
||||
set_opts("shellcmdflag", string.format("%s %s;", basecmd, ctrlcmd), {})
|
||||
set_opts("shellredir", "-RedirectStandardOutput %s -NoNewWindow -Wait", {})
|
||||
set_opts("shellpipe", "2>&1 | Out-File -Encoding UTF8 %s; exit $LastExitCode", {})
|
||||
set_opts("shellquote", "", {})
|
||||
set_opts("shellxquote", "", {})
|
||||
end
|
||||
end
|
||||
|
||||
local load_core = function()
|
||||
createdir()
|
||||
disable_distribution_plugins()
|
||||
leader_map()
|
||||
|
||||
gui_config()
|
||||
neovide_config()
|
||||
clipboard_config()
|
||||
shell_config()
|
||||
|
||||
require("core.options")
|
||||
require("core.mapping")
|
||||
require("core.event")
|
||||
require("core.pack")
|
||||
require("keymap")
|
||||
|
||||
vim.api.nvim_set_option_value("background", settings.background, {})
|
||||
vim.cmd.colorscheme(settings.colorscheme)
|
||||
end
|
||||
|
||||
load_core()
|
||||
@@ -0,0 +1,65 @@
|
||||
local bind = require("keymap.bind")
|
||||
local map_cr = bind.map_cr
|
||||
local map_cu = bind.map_cu
|
||||
local map_cmd = bind.map_cmd
|
||||
local map_callback = bind.map_callback
|
||||
|
||||
local core_map = {
|
||||
-- Suckless
|
||||
["n|<S-Tab>"] = map_cr("normal za"):with_noremap():with_silent():with_desc("edit: Toggle code fold"),
|
||||
["n|<C-s>"] = map_cu("write"):with_noremap():with_silent():with_desc("edit: Save file"),
|
||||
["n|Y"] = map_cmd("y$"):with_desc("edit: Yank text to EOL"),
|
||||
["n|D"] = map_cmd("d$"):with_desc("edit: Delete text to EOL"),
|
||||
["n|n"] = map_cmd("nzzzv"):with_noremap():with_desc("edit: Next search result"),
|
||||
["n|N"] = map_cmd("Nzzzv"):with_noremap():with_desc("edit: Prev search result"),
|
||||
["n|J"] = map_cmd("mzJ`z"):with_noremap():with_desc("edit: Join next line"),
|
||||
["n|<Esc>"] = map_callback(function()
|
||||
_flash_esc_or_noh()
|
||||
end)
|
||||
:with_noremap()
|
||||
:with_silent()
|
||||
:with_desc("edit: Clear search highlight"),
|
||||
["n|<C-h>"] = map_cmd("<C-w>h"):with_noremap():with_desc("window: Focus left"),
|
||||
["n|<C-l>"] = map_cmd("<C-w>l"):with_noremap():with_desc("window: Focus right"),
|
||||
["n|<C-j>"] = map_cmd("<C-w>j"):with_noremap():with_desc("window: Focus down"),
|
||||
["n|<C-k>"] = map_cmd("<C-w>k"):with_noremap():with_desc("window: Focus up"),
|
||||
["t|<C-w>h"] = map_cmd("<Cmd>wincmd h<CR>"):with_silent():with_noremap():with_desc("window: Focus left"),
|
||||
["t|<C-w>l"] = map_cmd("<Cmd>wincmd l<CR>"):with_silent():with_noremap():with_desc("window: Focus right"),
|
||||
["t|<C-w>j"] = map_cmd("<Cmd>wincmd j<CR>"):with_silent():with_noremap():with_desc("window: Focus down"),
|
||||
["t|<C-w>k"] = map_cmd("<Cmd>wincmd k<CR>"):with_silent():with_noremap():with_desc("window: Focus up"),
|
||||
["n|<A-h>"] = map_cr("vertical resize -3"):with_silent():with_desc("window: Resize -3 vertically"),
|
||||
["n|<A-l>"] = map_cr("vertical resize +3"):with_silent():with_desc("window: Resize +3 vertically"),
|
||||
["n|<A-j>"] = map_cr("resize -3"):with_silent():with_desc("window: Resize -3 horizontally"),
|
||||
["n|<A-k>"] = map_cr("resize +3"):with_silent():with_desc("window: Resize +3 horizontally"),
|
||||
["n|<C-q>"] = map_cr("wq"):with_desc("edit: Save file and quit"),
|
||||
["n|<A-S-q>"] = map_cr("q!"):with_desc("edit: Force quit"),
|
||||
["n|<leader>o"] = map_cr("setlocal spell! spelllang=en_us"):with_desc("edit: Toggle spell check"),
|
||||
["n|<leader>bn"] = map_cu("enew"):with_noremap():with_silent():with_desc("buffer: New"),
|
||||
["n|tn"] = map_cr("tabnew"):with_noremap():with_silent():with_desc("tab: Create a new tab"),
|
||||
["n|tk"] = map_cr("tabnext"):with_noremap():with_silent():with_desc("tab: Move to next tab"),
|
||||
["n|tj"] = map_cr("tabprevious"):with_noremap():with_silent():with_desc("tab: Move to previous tab"),
|
||||
["n|to"] = map_cr("tabonly"):with_noremap():with_silent():with_desc("tab: Only keep current tab"),
|
||||
-- Insert mode
|
||||
["i|<C-u>"] = map_cmd("<C-G>u<C-U>"):with_noremap():with_desc("edit: Delete previous block"),
|
||||
["i|<C-b>"] = map_cmd("<Left>"):with_noremap():with_desc("edit: Move cursor to left"),
|
||||
["i|<C-a>"] = map_cmd("<ESC>^i"):with_noremap():with_desc("edit: Move cursor to line start"),
|
||||
["i|<C-s>"] = map_cmd("<Esc>:w<CR>"):with_desc("edit: Save file"),
|
||||
["i|<C-q>"] = map_cmd("<Esc>:wq<CR>"):with_desc("edit: Save file and quit"),
|
||||
-- Command mode
|
||||
["c|<C-b>"] = map_cmd("<Left>"):with_noremap():with_desc("edit: Left"),
|
||||
["c|<C-f>"] = map_cmd("<Right>"):with_noremap():with_desc("edit: Right"),
|
||||
["c|<C-a>"] = map_cmd("<Home>"):with_noremap():with_desc("edit: Home"),
|
||||
["c|<C-e>"] = map_cmd("<End>"):with_noremap():with_desc("edit: End"),
|
||||
["c|<C-d>"] = map_cmd("<Del>"):with_noremap():with_desc("edit: Delete"),
|
||||
["c|<C-h>"] = map_cmd("<BS>"):with_noremap():with_desc("edit: Backspace"),
|
||||
["c|<C-t>"] = map_cmd([[<C-R>=expand("%:p:h") . "/" <CR>]])
|
||||
:with_noremap()
|
||||
:with_desc("edit: Complete path of current file"),
|
||||
-- Visual mode
|
||||
["v|J"] = map_cmd(":m '>+1<CR>gv=gv"):with_desc("edit: Move this line down"),
|
||||
["v|K"] = map_cmd(":m '<-2<CR>gv=gv"):with_desc("edit: Move this line up"),
|
||||
["v|<"] = map_cmd("<gv"):with_desc("edit: Decrease indent"),
|
||||
["v|>"] = map_cmd(">gv"):with_desc("edit: Increase indent"),
|
||||
}
|
||||
|
||||
bind.nvim_load_mapping(core_map)
|
||||
@@ -0,0 +1,128 @@
|
||||
local global = require("core.global")
|
||||
|
||||
local function load_options()
|
||||
local global_local = {
|
||||
-- backupdir = global.cache_dir .. "/backup/",
|
||||
-- directory = global.cache_dir .. "/swap/",
|
||||
-- spellfile = global.cache_dir .. "/spell/en.uft-8.add",
|
||||
-- viewdir = global.cache_dir .. "/view/",
|
||||
autoindent = true,
|
||||
autoread = true,
|
||||
autowrite = true,
|
||||
backspace = "indent,eol,start",
|
||||
backup = false,
|
||||
backupskip = "/tmp/*,$TMPDIR/*,$TMP/*,$TEMP/*,*/shm/*,/private/var/*,.vault.vim",
|
||||
breakat = [[\ \ ;:,!?]],
|
||||
breakindentopt = "shift:2,min:20",
|
||||
clipboard = "unnamedplus",
|
||||
cmdheight = 1, -- 0, 1, 2
|
||||
cmdwinheight = 5,
|
||||
complete = ".,w,b,k,kspell",
|
||||
completeopt = "menuone,noselect,popup",
|
||||
concealcursor = "niv",
|
||||
conceallevel = 0,
|
||||
cursorcolumn = true,
|
||||
cursorline = true,
|
||||
diffopt = "filler,iwhite,internal,linematch:60,algorithm:patience",
|
||||
display = "lastline",
|
||||
encoding = "utf-8",
|
||||
equalalways = false,
|
||||
errorbells = true,
|
||||
fileformats = "unix,mac,dos",
|
||||
foldenable = true,
|
||||
foldlevelstart = 99,
|
||||
formatoptions = "1jcroql",
|
||||
grepformat = "%f:%l:%c:%m",
|
||||
grepprg = "rg --hidden --vimgrep --smart-case --",
|
||||
helpheight = 12,
|
||||
hidden = true,
|
||||
history = 2000,
|
||||
ignorecase = true,
|
||||
inccommand = "nosplit",
|
||||
incsearch = true,
|
||||
infercase = true,
|
||||
jumpoptions = "stack",
|
||||
laststatus = 3,
|
||||
linebreak = true,
|
||||
list = true,
|
||||
listchars = "tab:»·,nbsp:+,trail:·,extends:→,precedes:←",
|
||||
magic = true,
|
||||
mousescroll = "ver:3,hor:6",
|
||||
number = true,
|
||||
previewheight = 12,
|
||||
-- Do NOT adjust the following option (pumblend) if you're using transparent background
|
||||
pumblend = 0,
|
||||
pumheight = 15,
|
||||
redrawtime = 1500,
|
||||
relativenumber = true,
|
||||
ruler = true,
|
||||
scrolloff = 2,
|
||||
sessionoptions = "buffers,curdir,folds,help,tabpages,winpos,winsize",
|
||||
shada = "!,'500,<50,@100,s10,h",
|
||||
shiftround = true,
|
||||
shiftwidth = 4,
|
||||
shortmess = "aoOTIcF",
|
||||
showbreak = "↳ ",
|
||||
showcmd = false,
|
||||
showmode = false,
|
||||
showtabline = 2,
|
||||
sidescrolloff = 5,
|
||||
signcolumn = "yes",
|
||||
smartcase = true,
|
||||
smarttab = true,
|
||||
smoothscroll = true,
|
||||
splitbelow = true,
|
||||
splitkeep = "screen",
|
||||
splitright = true,
|
||||
startofline = false,
|
||||
swapfile = false,
|
||||
switchbuf = "usetab,uselast",
|
||||
synmaxcol = 2500,
|
||||
tabstop = 4,
|
||||
termguicolors = true,
|
||||
timeout = true,
|
||||
timeoutlen = 300,
|
||||
ttimeout = true,
|
||||
ttimeoutlen = 0,
|
||||
undodir = global.cache_dir .. "/undo/",
|
||||
undofile = true,
|
||||
-- Please do NOT set `updatetime` to above 500, otherwise most plugins may not function correctly
|
||||
updatetime = 200,
|
||||
viewoptions = "folds,cursor,curdir,slash,unix",
|
||||
virtualedit = "block",
|
||||
visualbell = true,
|
||||
whichwrap = "h,l,<,>,[,],~",
|
||||
wildignore = ".git,.hg,.svn,*.pyc,*.o,*.out,*.jpg,*.jpeg,*.png,*.gif,*.zip,**/tmp/**,*.DS_Store,**/node_modules/**,**/bower_modules/**",
|
||||
wildignorecase = true,
|
||||
-- Do NOT adjust the following option (winblend) if you're using transparent background
|
||||
winblend = 0,
|
||||
winminwidth = 10,
|
||||
winwidth = 30,
|
||||
wrap = false,
|
||||
wrapscan = true,
|
||||
writebackup = false,
|
||||
}
|
||||
|
||||
local function isempty(s)
|
||||
return s == nil or s == ""
|
||||
end
|
||||
local function use_if_defined(val, fallback)
|
||||
return val ~= nil and val or fallback
|
||||
end
|
||||
|
||||
-- custom python provider
|
||||
local conda_prefix = os.getenv("CONDA_PREFIX")
|
||||
if not isempty(conda_prefix) then
|
||||
vim.g.python_host_prog = use_if_defined(vim.g.python_host_prog, conda_prefix .. "/bin/python")
|
||||
vim.g.python3_host_prog = use_if_defined(vim.g.python3_host_prog, conda_prefix .. "/bin/python")
|
||||
else
|
||||
vim.g.python_host_prog = use_if_defined(vim.g.python_host_prog, "python")
|
||||
vim.g.python3_host_prog = use_if_defined(vim.g.python3_host_prog, "python3")
|
||||
end
|
||||
|
||||
for name, value in pairs(require("modules.utils").extend_config(global_local, "user.options")) do
|
||||
vim.api.nvim_set_option_value(name, value, {})
|
||||
end
|
||||
end
|
||||
|
||||
load_options()
|
||||
@@ -0,0 +1,138 @@
|
||||
local fn, api = vim.fn, vim.api
|
||||
local global = require("core.global")
|
||||
local is_mac = global.is_mac
|
||||
local vim_path = global.vim_path
|
||||
local data_dir = global.data_dir
|
||||
local lazy_path = data_dir .. "lazy/lazy.nvim"
|
||||
local modules_dir = vim_path .. "/lua/modules"
|
||||
local user_config_dir = vim_path .. "/lua/user"
|
||||
|
||||
local settings = require("core.settings")
|
||||
local use_ssh = settings.use_ssh
|
||||
|
||||
local icons = {
|
||||
kind = require("modules.utils.icons").get("kind"),
|
||||
documents = require("modules.utils.icons").get("documents"),
|
||||
ui = require("modules.utils.icons").get("ui"),
|
||||
ui_sep = require("modules.utils.icons").get("ui", true),
|
||||
misc = require("modules.utils.icons").get("misc"),
|
||||
}
|
||||
|
||||
local Lazy = {}
|
||||
|
||||
function Lazy:load_plugins()
|
||||
self.modules = {}
|
||||
|
||||
local append_nativertp = function()
|
||||
package.path = package.path
|
||||
.. string.format(
|
||||
";%s;%s;%s",
|
||||
modules_dir .. "/configs/?.lua",
|
||||
modules_dir .. "/configs/?/init.lua",
|
||||
user_config_dir .. "/?.lua"
|
||||
)
|
||||
end
|
||||
|
||||
local get_plugins_list = function()
|
||||
local list = {}
|
||||
local plugins_list = vim.split(fn.glob(modules_dir .. "/plugins/*.lua"), "\n")
|
||||
local user_plugins_list = vim.split(fn.glob(user_config_dir .. "/plugins/*.lua"), "\n", { trimempty = true })
|
||||
vim.list_extend(plugins_list, user_plugins_list)
|
||||
for _, f in ipairs(plugins_list) do
|
||||
-- aggregate the plugins from `/plugins/*.lua` and `/user/plugins/*.lua` to a plugin list of a certain field for later `require` action.
|
||||
-- current fields contains: completion, editor, lang, tool, ui
|
||||
list[#list + 1] = f:find(modules_dir) and f:sub(#modules_dir - 6, -1) or f:sub(#user_config_dir - 3, -1)
|
||||
end
|
||||
return list
|
||||
end
|
||||
|
||||
append_nativertp()
|
||||
|
||||
for _, m in ipairs(get_plugins_list()) do
|
||||
-- require modules returned from `get_plugins_list()` function.
|
||||
local modules = require(m:sub(0, #m - 4))
|
||||
if type(modules) == "table" then
|
||||
for name, conf in pairs(modules) do
|
||||
self.modules[#self.modules + 1] = vim.tbl_extend("force", { name }, conf)
|
||||
end
|
||||
end
|
||||
end
|
||||
for _, name in ipairs(settings.disabled_plugins) do
|
||||
self.modules[#self.modules + 1] = { name, enabled = false }
|
||||
end
|
||||
end
|
||||
|
||||
function Lazy:load_lazy()
|
||||
if not vim.uv.fs_stat(lazy_path) then
|
||||
local lazy_repo = use_ssh and "git@github.com:folke/lazy.nvim.git " or "https://github.com/folke/lazy.nvim.git "
|
||||
api.nvim_command("!git clone --filter=blob:none --branch=stable " .. lazy_repo .. lazy_path)
|
||||
end
|
||||
self:load_plugins()
|
||||
|
||||
local clone_prefix = use_ssh and "git@github.com:%s.git" or "https://github.com/%s.git"
|
||||
local lazy_settings = {
|
||||
root = data_dir .. "lazy", -- directory where plugins will be installed
|
||||
git = {
|
||||
-- log = { "-10" }, -- show the last 10 commits
|
||||
timeout = 300,
|
||||
url_format = clone_prefix,
|
||||
},
|
||||
install = {
|
||||
-- install missing plugins on startup. This doesn't increase startup time.
|
||||
missing = true,
|
||||
colorscheme = { settings.colorscheme },
|
||||
},
|
||||
ui = {
|
||||
-- a number <1 is a percentage., >1 is a fixed size
|
||||
size = { width = 0.88, height = 0.8 },
|
||||
wrap = true, -- wrap the lines in the ui
|
||||
-- The border to use for the UI window. Accepts same border values as |nvim_open_win()|.
|
||||
border = "rounded",
|
||||
icons = {
|
||||
cmd = icons.misc.Code,
|
||||
config = icons.ui.Gear,
|
||||
event = icons.kind.Event,
|
||||
ft = icons.documents.Files,
|
||||
init = icons.misc.ManUp,
|
||||
import = icons.documents.Import,
|
||||
keys = icons.ui.Keyboard,
|
||||
loaded = icons.ui.Check,
|
||||
not_loaded = icons.misc.Ghost,
|
||||
plugin = icons.ui.Package,
|
||||
runtime = icons.misc.Vim,
|
||||
source = icons.kind.StaticMethod,
|
||||
start = icons.ui.Play,
|
||||
list = {
|
||||
icons.ui_sep.BigCircle,
|
||||
icons.ui_sep.BigUnfilledCircle,
|
||||
icons.ui_sep.Square,
|
||||
icons.ui_sep.ChevronRight,
|
||||
},
|
||||
},
|
||||
},
|
||||
performance = {
|
||||
cache = {
|
||||
enabled = true,
|
||||
path = vim.fn.stdpath("cache") .. "/lazy/cache",
|
||||
-- Once one of the following events triggers, caching will be disabled.
|
||||
-- To cache all modules, set this to `{}`, but that is not recommended.
|
||||
disable_events = { "UIEnter", "BufReadPre" },
|
||||
ttl = 3600 * 24 * 2, -- keep unused modules for up to 2 days
|
||||
},
|
||||
reset_packpath = true, -- reset the package path to improve startup time
|
||||
rtp = {
|
||||
reset = true, -- reset the runtime path to $VIMRUNTIME and the config directory
|
||||
---@type string[]
|
||||
paths = {}, -- add any custom paths here that you want to include in the rtp
|
||||
},
|
||||
},
|
||||
}
|
||||
if is_mac then
|
||||
lazy_settings.concurrency = 20
|
||||
end
|
||||
|
||||
vim.opt.rtp:prepend(lazy_path)
|
||||
require("lazy").setup(self.modules, lazy_settings)
|
||||
end
|
||||
|
||||
Lazy:load_lazy()
|
||||
@@ -0,0 +1,225 @@
|
||||
local settings = {}
|
||||
|
||||
-- Set it to false if you want to use https to update plugins and treesitter parsers.
|
||||
---@type boolean
|
||||
settings["use_ssh"] = true
|
||||
|
||||
-- Set it to false if you don't use copilot
|
||||
---@type boolean
|
||||
settings["use_copilot"] = true
|
||||
|
||||
-- Set it to false if there is no need to format on save.
|
||||
---@type boolean
|
||||
settings["format_on_save"] = true
|
||||
|
||||
-- Set format timeout here (in ms).
|
||||
---@type number
|
||||
settings["format_timeout"] = 1000
|
||||
|
||||
-- Set it to false if the notification after formatting is annoying.
|
||||
---@type boolean
|
||||
settings["format_notify"] = true
|
||||
|
||||
-- Set it to true if you prefer formatting ONLY the *changed lines* as defined by your version control system.
|
||||
-- NOTE: This entry will only be respected if:
|
||||
-- > The buffer to be formatted is under version control (Git or Mercurial);
|
||||
-- > Any of the server attached to that buffer supports |DocumentRangeFormattingProvider| server capability.
|
||||
-- Otherwise Neovim would fall back to format the whole buffer, and a warning will be issued.
|
||||
---@type boolean
|
||||
settings["format_modifications_only"] = false
|
||||
|
||||
-- Set the format disabled directories here, files under these dirs won't be formatted on save.
|
||||
--- NOTE: Directories may contain regular expressions (grammar: vim). |regexp|
|
||||
--- NOTE: Directories are automatically normalized. |vim.fs.normalize()|
|
||||
---@type string[]
|
||||
settings["format_disabled_dirs"] = {
|
||||
-- Example
|
||||
"~/format_disabled_dir",
|
||||
}
|
||||
|
||||
-- Filetypes in this list will skip lsp formatting if rhs is true.
|
||||
---@type table<string, boolean>
|
||||
settings["formatter_block_list"] = {
|
||||
lua = false, -- example
|
||||
}
|
||||
|
||||
-- Servers in this list will skip setting formatting capabilities if rhs is true.
|
||||
---@type table<string, boolean>
|
||||
settings["server_formatting_block_list"] = {
|
||||
lua_ls = true,
|
||||
tsserver = true,
|
||||
clangd = true,
|
||||
}
|
||||
|
||||
-- Set it to false if you want to turn off LSP Inlay Hints
|
||||
---@type boolean
|
||||
settings["lsp_inlayhints"] = true
|
||||
|
||||
-- Set it to false if diagnostics virtual text is annoying.
|
||||
-- If disabled, you may browse lsp diagnostics using trouble.nvim (press `gt` to toggle it).
|
||||
---@type boolean
|
||||
settings["diagnostics_virtual_text"] = true
|
||||
|
||||
-- Set it to one of the values below if you want to change the visible severity level of lsp diagnostics.
|
||||
-- Priority: `Error` > `Warning` > `Information` > `Hint`.
|
||||
-- > e.g. if you set this option to `Warning`, only lsp warnings and errors will be shown.
|
||||
-- NOTE: This entry only works when `diagnostics_virtual_text` is true.
|
||||
---@type "ERROR"|"WARN"|"INFO"|"HINT"
|
||||
settings["diagnostics_level"] = "HINT"
|
||||
|
||||
-- Set the plugins to disable here.
|
||||
-- Example: "Some-User/A-Repo"
|
||||
---@type string[]
|
||||
settings["disabled_plugins"] = {}
|
||||
|
||||
-- Set it to false if you don't use nvim to open big files.
|
||||
---@type boolean
|
||||
settings["load_big_files_faster"] = true
|
||||
|
||||
-- Change the colors of the global palette here.
|
||||
-- Settings will complete their replacement at initialization.
|
||||
-- Parameters will be automatically completed as you type.
|
||||
-- Example: { sky = "#04A5E5" }
|
||||
---@type palette[]
|
||||
settings["palette_overwrite"] = {}
|
||||
|
||||
-- Set the colorscheme to use here.
|
||||
-- Available values are: `catppuccin`, `catppuccin-latte`, `catppucin-mocha`, `catppuccin-frappe`, `catppuccin-macchiato`.
|
||||
---@type string
|
||||
settings["colorscheme"] = "catppuccin"
|
||||
|
||||
-- Set it to true if your terminal has transparent background.
|
||||
---@type boolean
|
||||
settings["transparent_background"] = false
|
||||
|
||||
-- Set background color to use here.
|
||||
-- Useful if you would like to use a colorscheme that has a light and dark variant like `edge`.
|
||||
-- Valid values are: `dark`, `light`.
|
||||
---@type "dark"|"light"
|
||||
settings["background"] = "dark"
|
||||
|
||||
-- Set the command for handling external URLs here. The executable must be available on your $PATH.
|
||||
-- This entry is IGNORED on Windows and macOS, which have their default handlers builtin.
|
||||
---@type string
|
||||
settings["external_browser"] = "chrome-cli open"
|
||||
|
||||
-- Set the language servers that will be installed during bootstrap here.
|
||||
-- check the below link for all the supported LSPs:
|
||||
-- https://github.com/neovim/nvim-lspconfig/tree/master/lua/lspconfig/server_configurations
|
||||
---@type string[]
|
||||
settings["lsp_deps"] = {
|
||||
"bashls",
|
||||
"clangd",
|
||||
"html",
|
||||
"jsonls",
|
||||
"lua_ls",
|
||||
"pylsp",
|
||||
"gopls",
|
||||
}
|
||||
|
||||
-- Set the general-purpose servers that will be installed during bootstrap here.
|
||||
-- Check the below link for all supported sources.
|
||||
-- in `code_actions`, `completion`, `diagnostics`, `formatting`, `hover` folders:
|
||||
-- https://github.com/nvimtools/none-ls.nvim/tree/main/lua/null-ls/builtins
|
||||
---@type string[]
|
||||
settings["null_ls_deps"] = {
|
||||
"clang_format",
|
||||
"gofumpt",
|
||||
"goimports",
|
||||
"prettier",
|
||||
"shfmt",
|
||||
"stylua",
|
||||
"vint",
|
||||
}
|
||||
|
||||
-- Set the Debug Adapter Protocol (DAP) clients that will be installed and configured during bootstrap here.
|
||||
-- Check the below link for all supported DAPs:
|
||||
-- https://github.com/jay-babu/mason-nvim-dap.nvim/blob/main/lua/mason-nvim-dap/mappings/source.lua
|
||||
---@type string[]
|
||||
settings["dap_deps"] = {
|
||||
"codelldb", -- C-Family
|
||||
"delve", -- Go
|
||||
"python", -- Python (debugpy)
|
||||
}
|
||||
|
||||
-- Set the Treesitter parsers that will be installed during bootstrap here.
|
||||
-- Check the below link for all supported languages:
|
||||
-- https://github.com/nvim-treesitter/nvim-treesitter#supported-languages
|
||||
---@type string[]
|
||||
settings["treesitter_deps"] = {
|
||||
"bash",
|
||||
"c",
|
||||
"cpp",
|
||||
"css",
|
||||
"go",
|
||||
"gomod",
|
||||
"html",
|
||||
"javascript",
|
||||
"json",
|
||||
"jsonc",
|
||||
"latex",
|
||||
"lua",
|
||||
"make",
|
||||
"markdown",
|
||||
"markdown_inline",
|
||||
"python",
|
||||
"rust",
|
||||
"typescript",
|
||||
"vimdoc",
|
||||
"vue",
|
||||
"yaml",
|
||||
}
|
||||
|
||||
-- Set the options for neovim's gui clients like `neovide` and `neovim-qt` here.
|
||||
-- NOTE: Currently, only the following options related to the GUI are supported. Other entries will be IGNORED.
|
||||
---@type { font_name: string, font_size: number }
|
||||
settings["gui_config"] = {
|
||||
font_name = "JetBrainsMono Nerd Font",
|
||||
font_size = 12,
|
||||
}
|
||||
|
||||
-- Set the options specific to `neovide` here.
|
||||
-- NOTE: You should remove the `neovide_` prefix (with trailing underscore) from all your entries below.
|
||||
-- Check the below link for all supported entries:
|
||||
-- https://neovide.dev/configuration.html
|
||||
---@type table<string, boolean|number|string>
|
||||
settings["neovide_config"] = {
|
||||
no_idle = true,
|
||||
refresh_rate = 120,
|
||||
cursor_vfx_mode = "railgun",
|
||||
cursor_vfx_opacity = 200.0,
|
||||
cursor_antialiasing = true,
|
||||
cursor_trail_length = 0.05,
|
||||
cursor_animation_length = 0.03,
|
||||
cursor_vfx_particle_speed = 20.0,
|
||||
cursor_vfx_particle_density = 5.0,
|
||||
cursor_vfx_particle_lifetime = 1.2,
|
||||
}
|
||||
|
||||
-- Set the dashboard startup image here
|
||||
-- You can generate the ascii image using: https://github.com/TheZoraiz/ascii-image-converter
|
||||
-- More info: https://github.com/ayamir/nvimdots/wiki/Issues#change-dashboard-startup-image
|
||||
---@type string[]
|
||||
settings["dashboard_image"] = {
|
||||
[[⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]],
|
||||
[[⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋⣠⣶⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]],
|
||||
[[⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣡⣾⣿⣿⣿⣿⣿⢿⣿⣿⣿⣿⣿⣿⣟⠻⣿⣿⣿⣿⣿⣿⣿⣿]],
|
||||
[[⣿⣿⣿⣿⣿⣿⣿⣿⡿⢫⣷⣿⣿⣿⣿⣿⣿⣿⣾⣯⣿⡿⢧⡚⢷⣌⣽⣿⣿⣿⣿⣿⣶⡌⣿⣿⣿⣿⣿⣿]],
|
||||
[[⣿⣿⣿⣿⣿⣿⣿⣿⠇⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣮⣇⣘⠿⢹⣿⣿⣿⣿⣿⣻⢿⣿⣿⣿⣿⣿]],
|
||||
[[⣿⣿⣿⣿⣿⣿⣿⣿⠀⢸⣿⣿⡇⣿⣿⣿⣿⣿⣿⣿⣿⡟⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⣻⣿⣿⣿⣿]],
|
||||
[[⣿⣿⣿⣿⣿⣿⣿⡇⠀⣬⠏⣿⡇⢻⣿⣿⣿⣿⣿⣿⣿⣷⣼⣿⣿⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⢻⣿⣿⣿⣿]],
|
||||
[[⣿⣿⣿⣿⣿⣿⣿⠀⠈⠁⠀⣿⡇⠘⡟⣿⣿⣿⣿⣿⣿⣿⣿⡏⠿⣿⣟⣿⣿⣿⣿⣿⣿⣿⣿⣇⣿⣿⣿⣿]],
|
||||
[[⣿⣿⣿⣿⣿⣿⡏⠀⠀⠐⠀⢻⣇⠀⠀⠹⣿⣿⣿⣿⣿⣿⣩⡶⠼⠟⠻⠞⣿⡈⠻⣟⢻⣿⣿⣿⣿⣿⣿⣿]],
|
||||
[[⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⢿⠀⡆⠀⠘⢿⢻⡿⣿⣧⣷⢣⣶⡃⢀⣾⡆⡋⣧⠙⢿⣿⣿⣟⣿⣿⣿⣿]],
|
||||
[[⣿⣿⣿⣿⣿⣿⡿⠀⠀⠀⠀⠀⠀⠀⡥⠂⡐⠀⠁⠑⣾⣿⣿⣾⣿⣿⣿⡿⣷⣷⣿⣧⣾⣿⣿⣿⣿⣿⣿⣿]],
|
||||
[[⣿⣿⡿⣿⣍⡴⠆⠀⠀⠀⠀⠀⠀⠀⠀⣼⣄⣀⣷⡄⣙⢿⣿⣿⣿⣿⣯⣶⣿⣿⢟⣾⣿⣿⢡⣿⣿⣿⣿⣿]],
|
||||
[[⣿⡏⣾⣿⣿⣿⣷⣦⠀⠀⠀⢀⡀⠀⠀⠠⣭⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⣡⣾⣿⣿⢏⣾⣿⣿⣿⣿⣿]],
|
||||
[[⣿⣿⣿⣿⣿⣿⣿⣿⡴⠀⠀⠀⠀⠀⠠⠀⠰⣿⣿⣿⣷⣿⠿⠿⣿⣿⣭⡶⣫⠔⢻⢿⢇⣾⣿⣿⣿⣿⣿⣿]],
|
||||
[[⣿⣿⣿⡿⢫⣽⠟⣋⠀⠀⠀⠀⣶⣦⠀⠀⠀⠈⠻⣿⣿⣿⣾⣿⣿⣿⣿⡿⣣⣿⣿⢸⣾⣿⣿⣿⣿⣿⣿⣿]],
|
||||
[[⡿⠛⣹⣶⣶⣶⣾⣿⣷⣦⣤⣤⣀⣀⠀⠀⠀⠀⠀⠀⠉⠛⠻⢿⣿⡿⠫⠾⠿⠋⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]],
|
||||
[[⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣀⡆⣠⢀⣴⣏⡀⠀⠀⠀⠉⠀⠀⢀⣠⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]],
|
||||
[[⠿⠛⠛⠛⠛⠛⠛⠻⢿⣿⣿⣿⣿⣯⣟⠷⢷⣿⡿⠋⠀⠀⠀⠀⣵⡀⢠⡿⠋⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]],
|
||||
[[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠛⢿⣿⣿⠂⠀⠀⠀⠀⠀⢀⣽⣿⣿⣿⣿⣿⣿⣿⣍⠛⠿⣿⣿⣿⣿⣿⣿]],
|
||||
}
|
||||
|
||||
return require("modules.utils").extend_config(settings, "user.settings")
|
||||
Reference in New Issue
Block a user