mirror of
https://github.com/Keyitdev/dotfiles.git
synced 2026-09-24 01:52:09 +00:00
New version: created v3
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
local status_ok, Comment = pcall(require, "Comment")
|
||||
if status_ok then
|
||||
local utils = require "Comment.utils"
|
||||
Comment.setup(astronvim.user_plugin_opts("plugins.Comment", {
|
||||
pre_hook = function(ctx)
|
||||
local location = nil
|
||||
if ctx.ctype == utils.ctype.block then
|
||||
location = require("ts_context_commentstring.utils").get_cursor_location()
|
||||
elseif ctx.cmotion == utils.cmotion.v or ctx.cmotion == utils.cmotion.V then
|
||||
location = require("ts_context_commentstring.utils").get_visual_start_location()
|
||||
end
|
||||
|
||||
return require("ts_context_commentstring.internal").calculate_commentstring {
|
||||
key = ctx.ctype == utils.ctype.line and "__default" or "__multiline",
|
||||
location = location,
|
||||
}
|
||||
end,
|
||||
}))
|
||||
end
|
||||
@@ -0,0 +1,52 @@
|
||||
local status_ok, aerial = pcall(require, "aerial")
|
||||
if status_ok then
|
||||
aerial.setup(astronvim.user_plugin_opts("plugins.aerial", {
|
||||
close_behavior = "global",
|
||||
backends = { "lsp", "treesitter", "markdown" },
|
||||
min_width = 28,
|
||||
show_guides = true,
|
||||
filter_kind = false,
|
||||
icons = {
|
||||
Array = "",
|
||||
Boolean = "⊨",
|
||||
Class = "",
|
||||
Constant = "",
|
||||
Constructor = "",
|
||||
Key = "",
|
||||
Function = "",
|
||||
Method = "ƒ",
|
||||
Namespace = "",
|
||||
Null = "NULL",
|
||||
Number = "#",
|
||||
Object = "⦿",
|
||||
Property = "",
|
||||
TypeParameter = "𝙏",
|
||||
Variable = "",
|
||||
Enum = "ℰ",
|
||||
Package = "",
|
||||
EnumMember = "",
|
||||
File = "",
|
||||
Module = "",
|
||||
Field = "",
|
||||
Interface = "ﰮ",
|
||||
String = "𝓐",
|
||||
Struct = "𝓢",
|
||||
Event = "",
|
||||
Operator = "+",
|
||||
},
|
||||
guides = {
|
||||
mid_item = "├ ",
|
||||
last_item = "└ ",
|
||||
nested_top = "│ ",
|
||||
whitespace = " ",
|
||||
},
|
||||
on_attach = function(bufnr)
|
||||
-- Jump forwards/backwards with '{' and '}'
|
||||
vim.keymap.set("n", "{", "<cmd>AerialPrev<cr>", { buffer = bufnr, desc = "Jump backwards in Aerial" })
|
||||
vim.keymap.set("n", "}", "<cmd>AerialNext<cr>", { buffer = bufnr, desc = "Jump forwards in Aerial" })
|
||||
-- Jump up the tree with '[[' or ']]'
|
||||
vim.keymap.set("n", "[[", "<cmd>AerialPrevUp<cr>", { buffer = bufnr, desc = "Jump up and backwards in Aerial" })
|
||||
vim.keymap.set("n", "]]", "<cmd>AerialNextUp<cr>", { buffer = bufnr, desc = "Jump up and forwards in Aerial" })
|
||||
end,
|
||||
}))
|
||||
end
|
||||
@@ -0,0 +1,40 @@
|
||||
local status_ok, alpha = pcall(require, "alpha")
|
||||
if status_ok then
|
||||
local alpha_button = astronvim.alpha_button
|
||||
alpha.setup(astronvim.user_plugin_opts("plugins.alpha", {
|
||||
layout = {
|
||||
{ type = "padding", val = vim.fn.max { 2, vim.fn.floor(vim.fn.winheight(0) * 0.2) } },
|
||||
{
|
||||
type = "text",
|
||||
val = astronvim.user_plugin_opts("header", {
|
||||
" █████ ███████ ████████ ██████ ██████",
|
||||
"██ ██ ██ ██ ██ ██ ██ ██",
|
||||
"███████ ███████ ██ ██████ ██ ██",
|
||||
"██ ██ ██ ██ ██ ██ ██ ██",
|
||||
"██ ██ ███████ ██ ██ ██ ██████",
|
||||
" ",
|
||||
" ███ ██ ██ ██ ██ ███ ███",
|
||||
" ████ ██ ██ ██ ██ ████ ████",
|
||||
" ██ ██ ██ ██ ██ ██ ██ ████ ██",
|
||||
" ██ ██ ██ ██ ██ ██ ██ ██ ██",
|
||||
" ██ ████ ████ ██ ██ ██",
|
||||
}, false),
|
||||
opts = { position = "center", hl = "DashboardHeader" },
|
||||
},
|
||||
{ type = "padding", val = 5 },
|
||||
{
|
||||
type = "group",
|
||||
val = {
|
||||
alpha_button("LDR f f", " Find File "),
|
||||
alpha_button("LDR f o", " Recents "),
|
||||
alpha_button("LDR f w", " Find Word "),
|
||||
alpha_button("LDR f n", " New File "),
|
||||
alpha_button("LDR f m", " Bookmarks "),
|
||||
alpha_button("LDR S l", " Last Session "),
|
||||
},
|
||||
opts = { spacing = 1 },
|
||||
},
|
||||
},
|
||||
opts = {},
|
||||
}))
|
||||
end
|
||||
@@ -0,0 +1,33 @@
|
||||
local status_ok, npairs = pcall(require, "nvim-autopairs")
|
||||
if status_ok then
|
||||
npairs.setup(astronvim.user_plugin_opts("plugins.nvim-autopairs", {
|
||||
check_ts = true,
|
||||
ts_config = {
|
||||
lua = { "string", "source" },
|
||||
javascript = { "string", "template_string" },
|
||||
java = false,
|
||||
},
|
||||
disable_filetype = { "TelescopePrompt", "spectre_panel" },
|
||||
fast_wrap = {
|
||||
map = "<M-e>",
|
||||
chars = { "{", "[", "(", '"', "'" },
|
||||
pattern = string.gsub([[ [%'%"%)%>%]%)%}%,] ]], "%s+", ""),
|
||||
offset = 0,
|
||||
end_key = "$",
|
||||
keys = "qwertyuiopzxcvbnmasdfghjkl",
|
||||
check_comma = true,
|
||||
highlight = "PmenuSel",
|
||||
highlight_grey = "LineNr",
|
||||
},
|
||||
}))
|
||||
|
||||
local rules = astronvim.user_plugin_opts("nvim-autopairs").add_rules
|
||||
if vim.tbl_contains({ "function", "table" }, type(rules)) then
|
||||
npairs.add_rules(type(rules) == "function" and rules(npairs) or rules)
|
||||
end
|
||||
|
||||
local cmp_status_ok, cmp = pcall(require, "cmp")
|
||||
if cmp_status_ok then
|
||||
cmp.event:on("confirm_done", require("nvim-autopairs.completion.cmp").on_confirm_done { map_char = { tex = "" } })
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,4 @@
|
||||
local status_ok, better_escape = pcall(require, "better_escape")
|
||||
if status_ok then
|
||||
better_escape.setup(astronvim.user_plugin_opts "plugins.better_escape")
|
||||
end
|
||||
@@ -0,0 +1,19 @@
|
||||
local status_ok, bufferline = pcall(require, "bufferline")
|
||||
if status_ok then
|
||||
bufferline.setup(astronvim.user_plugin_opts("plugins.bufferline", {
|
||||
options = {
|
||||
offsets = {
|
||||
{ filetype = "NvimTree", text = "", padding = 1 },
|
||||
{ filetype = "neo-tree", text = "", padding = 1 },
|
||||
{ filetype = "Outline", text = "", padding = 1 },
|
||||
},
|
||||
buffer_close_icon = "",
|
||||
modified_icon = "",
|
||||
close_icon = "",
|
||||
max_name_length = 14,
|
||||
max_prefix_length = 13,
|
||||
tab_size = 20,
|
||||
separator_style = "thin",
|
||||
},
|
||||
}))
|
||||
end
|
||||
@@ -0,0 +1,4 @@
|
||||
local status_ok, cinnamon = pcall(require, "cinnamon")
|
||||
if status_ok then
|
||||
cinnamon.setup(astronvim.user_plugin_opts("plugins.cinnamon", {}))
|
||||
end
|
||||
@@ -0,0 +1,119 @@
|
||||
local cmp_status_ok, cmp = pcall(require, "cmp")
|
||||
local snip_status_ok, luasnip = pcall(require, "luasnip")
|
||||
if cmp_status_ok and snip_status_ok then
|
||||
local setup = cmp.setup
|
||||
local kind_icons = {
|
||||
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 = "",
|
||||
}
|
||||
|
||||
local function has_words_before()
|
||||
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
|
||||
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match "%s" == nil
|
||||
end
|
||||
|
||||
setup(astronvim.user_plugin_opts("plugins.cmp", {
|
||||
preselect = cmp.PreselectMode.None,
|
||||
formatting = {
|
||||
fields = { "kind", "abbr", "menu" },
|
||||
format = function(_, vim_item)
|
||||
vim_item.kind = string.format("%s", kind_icons[vim_item.kind])
|
||||
return vim_item
|
||||
end,
|
||||
},
|
||||
snippet = {
|
||||
expand = function(args)
|
||||
luasnip.lsp_expand(args.body)
|
||||
end,
|
||||
},
|
||||
duplicates = {
|
||||
nvim_lsp = 1,
|
||||
luasnip = 1,
|
||||
cmp_tabnine = 1,
|
||||
buffer = 1,
|
||||
path = 1,
|
||||
},
|
||||
confirm_opts = {
|
||||
behavior = cmp.ConfirmBehavior.Replace,
|
||||
select = false,
|
||||
},
|
||||
window = {
|
||||
documentation = {
|
||||
border = { "╭", "─", "╮", "│", "╯", "─", "╰", "│" },
|
||||
},
|
||||
},
|
||||
mapping = {
|
||||
["<Up>"] = cmp.mapping.select_prev_item(),
|
||||
["<Down>"] = cmp.mapping.select_next_item(),
|
||||
["<C-p>"] = cmp.mapping.select_prev_item(),
|
||||
["<C-n>"] = cmp.mapping.select_next_item(),
|
||||
["<C-k>"] = cmp.mapping.select_prev_item(),
|
||||
["<C-j>"] = cmp.mapping.select_next_item(),
|
||||
["<C-d>"] = cmp.mapping(cmp.mapping.scroll_docs(-1), { "i", "c" }),
|
||||
["<C-f>"] = cmp.mapping(cmp.mapping.scroll_docs(1), { "i", "c" }),
|
||||
["<C-Space>"] = cmp.mapping(cmp.mapping.complete(), { "i", "c" }),
|
||||
["<C-y>"] = cmp.config.disable,
|
||||
["<C-e>"] = cmp.mapping {
|
||||
i = cmp.mapping.abort(),
|
||||
c = cmp.mapping.close(),
|
||||
},
|
||||
["<CR>"] = cmp.mapping.confirm { select = false },
|
||||
["<Tab>"] = cmp.mapping(function(fallback)
|
||||
if cmp.visible() then
|
||||
cmp.select_next_item()
|
||||
elseif luasnip.expandable() then
|
||||
luasnip.expand()
|
||||
elseif luasnip.expand_or_jumpable() then
|
||||
luasnip.expand_or_jump()
|
||||
elseif has_words_before() then
|
||||
cmp.complete()
|
||||
else
|
||||
fallback()
|
||||
end
|
||||
end, {
|
||||
"i",
|
||||
"s",
|
||||
}),
|
||||
["<S-Tab>"] = cmp.mapping(function(fallback)
|
||||
if cmp.visible() then
|
||||
cmp.select_prev_item()
|
||||
elseif luasnip.jumpable(-1) then
|
||||
luasnip.jump(-1)
|
||||
else
|
||||
fallback()
|
||||
end
|
||||
end, {
|
||||
"i",
|
||||
"s",
|
||||
}),
|
||||
},
|
||||
}))
|
||||
for setup_opt, setup_table in pairs(astronvim.user_plugin_opts("cmp.setup", {})) do
|
||||
for pattern, options in pairs(setup_table) do
|
||||
setup[setup_opt](pattern, options)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,18 @@
|
||||
local status_ok, colorizer = pcall(require, "colorizer")
|
||||
if status_ok then
|
||||
local colorizer_opts = astronvim.user_plugin_opts("plugins.colorizer", {
|
||||
{ "*" },
|
||||
{
|
||||
RGB = true, -- #RGB hex codes
|
||||
RRGGBB = true, -- #RRGGBB hex codes
|
||||
names = false, -- "Name" codes like Blue
|
||||
RRGGBBAA = false, -- #RRGGBBAA hex codes
|
||||
rgb_fn = false, -- CSS rgb() and rgba() functions
|
||||
hsl_fn = false, -- CSS hsl() and hsla() functions
|
||||
css = false, -- Enable all css features: rgb_fn, hsl_fn, names, RGB, RRGGBB
|
||||
css_fn = false, -- Enable all CSS *functions*: rgb_fn, hsl_fn
|
||||
mode = "background", -- Set the display mode
|
||||
},
|
||||
})
|
||||
colorizer.setup(colorizer_opts[1], colorizer_opts[2])
|
||||
end
|
||||
@@ -0,0 +1,46 @@
|
||||
local status_ok, feline = pcall(require, "feline")
|
||||
if status_ok then
|
||||
local C = require "default_theme.colors"
|
||||
local hl = require("core.status").hl
|
||||
local provider = require("core.status").provider
|
||||
local conditional = require("core.status").conditional
|
||||
-- stylua: ignore
|
||||
feline.setup(astronvim.user_plugin_opts("plugins.feline", {
|
||||
disable = { filetypes = { "^NvimTree$", "^neo%-tree$", "^dashboard$", "^Outline$", "^aerial$" } },
|
||||
theme = hl.group("StatusLine", { fg = C.fg, bg = C.bg_1 }),
|
||||
components = {
|
||||
active = {
|
||||
{
|
||||
{ provider = provider.spacer(), hl = hl.mode() },
|
||||
{ provider = provider.spacer(2) },
|
||||
{ provider = "git_branch", hl = hl.fg("Conditional", { fg = C.purple_1, style = "bold" }), icon = " " },
|
||||
{ provider = provider.spacer(3), enabled = conditional.git_available },
|
||||
{ provider = { name = "file_type", opts = { filetype_icon = true, case = "lowercase" } }, enabled = conditional.has_filetype },
|
||||
{ provider = provider.spacer(2), enabled = conditional.has_filetype },
|
||||
{ provider = "git_diff_added", hl = hl.fg("GitSignsAdd", { fg = C.green }), icon = " " },
|
||||
{ provider = "git_diff_changed", hl = hl.fg("GitSignsChange", { fg = C.orange_1 }), icon = " 柳" },
|
||||
{ provider = "git_diff_removed", hl = hl.fg("GitSignsDelete", { fg = C.red_1 }), icon = " " },
|
||||
{ provider = provider.spacer(2), enabled = conditional.git_changed },
|
||||
{ provider = "diagnostic_errors", hl = hl.fg("DiagnosticError", { fg = C.red_1 }), icon = " " },
|
||||
{ provider = "diagnostic_warnings", hl = hl.fg("DiagnosticWarn", { fg = C.orange_1 }), icon = " " },
|
||||
{ provider = "diagnostic_info", hl = hl.fg("DiagnosticInfo", { fg = C.white_2 }), icon = " " },
|
||||
{ provider = "diagnostic_hints", hl = hl.fg("DiagnosticHint", { fg = C.yellow_1 }), icon = " " },
|
||||
},
|
||||
{
|
||||
{ provider = provider.lsp_progress, enabled = conditional.bar_width() },
|
||||
{ provider = provider.lsp_client_names(true), short_provider = provider.lsp_client_names(), enabled = conditional.bar_width(), icon = " " },
|
||||
{ provider = provider.spacer(2), enabled = conditional.bar_width() },
|
||||
{ provider = provider.treesitter_status, enabled = conditional.bar_width(), hl = hl.fg("GitSignsAdd", { fg = C.green }) },
|
||||
{ provider = provider.spacer(2) },
|
||||
{ provider = "position" },
|
||||
{ provider = provider.spacer(2) },
|
||||
{ provider = "line_percentage" },
|
||||
{ provider = provider.spacer() },
|
||||
{ provider = "scroll_bar", hl = hl.fg("TypeDef", { fg = C.yellow }) },
|
||||
{ provider = provider.spacer(2) },
|
||||
{ provider = provider.spacer(), hl = hl.mode() },
|
||||
},
|
||||
},
|
||||
},
|
||||
}))
|
||||
end
|
||||
@@ -0,0 +1,12 @@
|
||||
local status_ok, gitsigns = pcall(require, "gitsigns")
|
||||
if status_ok then
|
||||
gitsigns.setup(astronvim.user_plugin_opts("plugins.gitsigns", {
|
||||
signs = {
|
||||
add = { text = "▎" },
|
||||
change = { text = "▎" },
|
||||
delete = { text = "▎" },
|
||||
topdelete = { text = "契" },
|
||||
changedelete = { text = "▎" },
|
||||
},
|
||||
}))
|
||||
end
|
||||
@@ -0,0 +1,17 @@
|
||||
local status_ok, icons = pcall(require, "nvim-web-devicons")
|
||||
if status_ok then
|
||||
icons.set_icon(astronvim.user_plugin_opts("plugins.nvim-web-devicons", {
|
||||
deb = { icon = "", name = "Deb" },
|
||||
lock = { icon = "", name = "Lock" },
|
||||
mp3 = { icon = "", name = "Mp3" },
|
||||
mp4 = { icon = "", name = "Mp4" },
|
||||
out = { icon = "", name = "Out" },
|
||||
["robots.txt"] = { icon = "ﮧ", name = "Robots" },
|
||||
ttf = { icon = "", name = "TrueTypeFont" },
|
||||
rpm = { icon = "", name = "Rpm" },
|
||||
woff = { icon = "", name = "WebOpenFontFormat" },
|
||||
woff2 = { icon = "", name = "WebOpenFontFormat2" },
|
||||
xz = { icon = "", name = "Xz" },
|
||||
zip = { icon = "", name = "Zip" },
|
||||
}))
|
||||
end
|
||||
@@ -0,0 +1,50 @@
|
||||
local status_ok, indent_blankline = pcall(require, "indent_blankline")
|
||||
if status_ok then
|
||||
indent_blankline.setup(astronvim.user_plugin_opts("plugins.indent_blankline", {
|
||||
buftype_exclude = {
|
||||
"nofile",
|
||||
"terminal",
|
||||
"lsp-installer",
|
||||
"lspinfo",
|
||||
},
|
||||
filetype_exclude = {
|
||||
"help",
|
||||
"startify",
|
||||
"aerial",
|
||||
"alpha",
|
||||
"dashboard",
|
||||
"packer",
|
||||
"neogitstatus",
|
||||
"NvimTree",
|
||||
"neo-tree",
|
||||
"Trouble",
|
||||
},
|
||||
context_patterns = {
|
||||
"class",
|
||||
"return",
|
||||
"function",
|
||||
"method",
|
||||
"^if",
|
||||
"^while",
|
||||
"jsx_element",
|
||||
"^for",
|
||||
"^object",
|
||||
"^table",
|
||||
"block",
|
||||
"arguments",
|
||||
"if_statement",
|
||||
"else_clause",
|
||||
"jsx_element",
|
||||
"jsx_self_closing_element",
|
||||
"try_statement",
|
||||
"catch_clause",
|
||||
"import_statement",
|
||||
"operation_type",
|
||||
},
|
||||
show_trailing_blankline_indent = false,
|
||||
use_treesitter = true,
|
||||
char = "▏",
|
||||
context_char = "▏",
|
||||
show_current_context = true,
|
||||
}))
|
||||
end
|
||||
@@ -0,0 +1,4 @@
|
||||
local status_ok, indent_o_matic = pcall(require, "indent-o-matic")
|
||||
if status_ok then
|
||||
indent_o_matic.setup(astronvim.user_plugin_opts "plugins.indent-o-matic")
|
||||
end
|
||||
@@ -0,0 +1,167 @@
|
||||
astronvim.lsp = {}
|
||||
local user_plugin_opts = astronvim.user_plugin_opts
|
||||
local conditional_func = astronvim.conditional_func
|
||||
|
||||
local function lsp_highlight_document(client)
|
||||
if client.resolved_capabilities.document_highlight then
|
||||
vim.api.nvim_create_augroup("lsp_document_highlight", { clear = true })
|
||||
vim.api.nvim_create_autocmd("CursorHold", {
|
||||
group = "lsp_document_highlight",
|
||||
pattern = "<buffer>",
|
||||
callback = vim.lsp.buf.document_highlight,
|
||||
})
|
||||
vim.api.nvim_create_autocmd("CursorMoved", {
|
||||
group = "lsp_document_highlight",
|
||||
pattern = "<buffer>",
|
||||
callback = vim.lsp.buf.clear_references,
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
astronvim.lsp.on_attach = function(client, bufnr)
|
||||
astronvim.set_mappings(
|
||||
user_plugin_opts("lsp.mappings", {
|
||||
n = {
|
||||
["K"] = {
|
||||
function()
|
||||
vim.lsp.buf.hover()
|
||||
end,
|
||||
desc = "Hover symbol details",
|
||||
buffer = bufnr,
|
||||
},
|
||||
["<leader>la"] = {
|
||||
function()
|
||||
vim.lsp.buf.code_action()
|
||||
end,
|
||||
desc = "LSP code action",
|
||||
buffer = bufnr,
|
||||
},
|
||||
["<leader>lf"] = {
|
||||
function()
|
||||
vim.lsp.buf.formatting_sync()
|
||||
end,
|
||||
desc = "Format code",
|
||||
buffer = bufnr,
|
||||
},
|
||||
["<leader>lh"] = {
|
||||
function()
|
||||
vim.lsp.buf.signature_help()
|
||||
end,
|
||||
desc = "Signature help",
|
||||
buffer = bufnr,
|
||||
},
|
||||
["<leader>lr"] = {
|
||||
function()
|
||||
vim.lsp.buf.rename()
|
||||
end,
|
||||
desc = "Rename current symbol",
|
||||
buffer = bufnr,
|
||||
},
|
||||
["gD"] = {
|
||||
function()
|
||||
vim.lsp.buf.declaration()
|
||||
end,
|
||||
desc = "Declaration of current symbol",
|
||||
buffer = bufnr,
|
||||
},
|
||||
["gI"] = {
|
||||
function()
|
||||
vim.lsp.buf.implementation()
|
||||
end,
|
||||
desc = "Implementation of current symbol",
|
||||
buffer = bufnr,
|
||||
},
|
||||
["gd"] = {
|
||||
function()
|
||||
vim.lsp.buf.definition()
|
||||
end,
|
||||
desc = "Show the definition of current symbol",
|
||||
buffer = bufnr,
|
||||
},
|
||||
["gr"] = {
|
||||
function()
|
||||
vim.lsp.buf.references()
|
||||
end,
|
||||
desc = "References of current symbol",
|
||||
buffer = bufnr,
|
||||
},
|
||||
["<leader>ld"] = {
|
||||
function()
|
||||
vim.diagnostic.open_float()
|
||||
end,
|
||||
desc = "Hover diagnostics",
|
||||
buffer = bufnr,
|
||||
},
|
||||
["[d"] = {
|
||||
function()
|
||||
vim.diagnostic.goto_prev()
|
||||
end,
|
||||
desc = "Previous diagnostic",
|
||||
buffer = bufnr,
|
||||
},
|
||||
["]d"] = {
|
||||
function()
|
||||
vim.diagnostic.goto_next()
|
||||
end,
|
||||
desc = "Next diagnostic",
|
||||
buffer = bufnr,
|
||||
},
|
||||
["gl"] = {
|
||||
function()
|
||||
vim.diagnostic.open_float()
|
||||
end,
|
||||
desc = "Hover diagnostics",
|
||||
buffer = bufnr,
|
||||
},
|
||||
},
|
||||
}),
|
||||
{ buffer = bufnr }
|
||||
)
|
||||
|
||||
vim.api.nvim_buf_create_user_command(bufnr, "Format", function()
|
||||
vim.lsp.buf.formatting()
|
||||
end, { desc = "Format file with LSP" })
|
||||
|
||||
local on_attach_override = user_plugin_opts("lsp.on_attach", nil, false)
|
||||
local aerial_avail, aerial = pcall(require, "aerial")
|
||||
conditional_func(on_attach_override, true, client, bufnr)
|
||||
conditional_func(aerial.on_attach, aerial_avail, client, bufnr)
|
||||
lsp_highlight_document(client)
|
||||
end
|
||||
|
||||
astronvim.lsp.capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||
astronvim.lsp.capabilities.textDocument.completion.completionItem.documentationFormat = { "markdown", "plaintext" }
|
||||
astronvim.lsp.capabilities.textDocument.completion.completionItem.snippetSupport = true
|
||||
astronvim.lsp.capabilities.textDocument.completion.completionItem.preselectSupport = true
|
||||
astronvim.lsp.capabilities.textDocument.completion.completionItem.insertReplaceSupport = true
|
||||
astronvim.lsp.capabilities.textDocument.completion.completionItem.labelDetailsSupport = true
|
||||
astronvim.lsp.capabilities.textDocument.completion.completionItem.deprecatedSupport = true
|
||||
astronvim.lsp.capabilities.textDocument.completion.completionItem.commitCharactersSupport = true
|
||||
astronvim.lsp.capabilities.textDocument.completion.completionItem.tagSupport = { valueSet = { 1 } }
|
||||
astronvim.lsp.capabilities.textDocument.completion.completionItem.resolveSupport = {
|
||||
properties = { "documentation", "detail", "additionalTextEdits" },
|
||||
}
|
||||
|
||||
function astronvim.lsp.server_settings(server_name)
|
||||
local server = require("lspconfig")[server_name]
|
||||
local opts = user_plugin_opts(
|
||||
"lsp.server-settings." .. server_name,
|
||||
user_plugin_opts("lsp.server-settings." .. server_name, {
|
||||
capabilities = vim.tbl_deep_extend("force", astronvim.lsp.capabilities, server.capabilities or {}),
|
||||
}, true, "configs")
|
||||
)
|
||||
local old_on_attach = server.on_attach
|
||||
local user_on_attach = opts.on_attach
|
||||
opts.on_attach = function(client, bufnr)
|
||||
conditional_func(old_on_attach, true, client, bufnr)
|
||||
astronvim.lsp.on_attach(client, bufnr)
|
||||
conditional_func(user_on_attach, true, client, bufnr)
|
||||
end
|
||||
return opts
|
||||
end
|
||||
|
||||
function astronvim.lsp.disable_formatting(client)
|
||||
client.resolved_capabilities.document_formatting = false
|
||||
end
|
||||
|
||||
return astronvim.lsp
|
||||
@@ -0,0 +1,55 @@
|
||||
local status_ok, lspconfig = pcall(require, "lspconfig")
|
||||
if status_ok then
|
||||
require "configs.lsp.handlers"
|
||||
local insert = table.insert
|
||||
local tbl_contains = vim.tbl_contains
|
||||
local sign_define = vim.fn.sign_define
|
||||
local user_plugin_opts = astronvim.user_plugin_opts
|
||||
local user_registration = user_plugin_opts("lsp.server_registration", nil, false)
|
||||
|
||||
local signs = {
|
||||
{ name = "DiagnosticSignError", text = "" },
|
||||
{ name = "DiagnosticSignWarn", text = "" },
|
||||
{ name = "DiagnosticSignHint", text = "" },
|
||||
{ name = "DiagnosticSignInfo", text = "" },
|
||||
}
|
||||
for _, sign in ipairs(signs) do
|
||||
sign_define(sign.name, { texthl = sign.name, text = sign.text, numhl = "" })
|
||||
end
|
||||
vim.diagnostic.config(user_plugin_opts("diagnostics", {
|
||||
virtual_text = true,
|
||||
signs = { active = signs },
|
||||
update_in_insert = true,
|
||||
underline = true,
|
||||
severity_sort = true,
|
||||
float = {
|
||||
focusable = false,
|
||||
style = "minimal",
|
||||
border = "rounded",
|
||||
source = "always",
|
||||
header = "",
|
||||
prefix = "",
|
||||
},
|
||||
}))
|
||||
vim.lsp.handlers["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, { border = "rounded" })
|
||||
vim.lsp.handlers["textDocument/signatureHelp"] = vim.lsp.with(vim.lsp.handlers.signature_help, { border = "rounded" })
|
||||
|
||||
local servers = user_plugin_opts "lsp.servers"
|
||||
local skip_setup = user_plugin_opts "lsp.skip_setup"
|
||||
local installer_avail, lsp_installer = pcall(require, "nvim-lsp-installer")
|
||||
if installer_avail then
|
||||
for _, server in ipairs(lsp_installer.get_installed_servers()) do
|
||||
insert(servers, server.name)
|
||||
end
|
||||
end
|
||||
for _, server in ipairs(servers) do
|
||||
if not tbl_contains(skip_setup, server) then
|
||||
local opts = astronvim.lsp.server_settings(server)
|
||||
if type(user_registration) == "function" then
|
||||
user_registration(server, opts)
|
||||
else
|
||||
lspconfig[server].setup(opts)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1 @@
|
||||
return { on_attach = astronvim.lsp.disable_formatting }
|
||||
@@ -0,0 +1,17 @@
|
||||
return {
|
||||
on_attach = astronvim.lsp.disable_formatting,
|
||||
settings = {
|
||||
json = {
|
||||
schemas = require("schemastore").json.schemas(),
|
||||
},
|
||||
},
|
||||
setup = {
|
||||
commands = {
|
||||
Format = {
|
||||
function()
|
||||
vim.lsp.buf.range_formatting({}, { 0, 0 }, { vim.fn.line "$", 0 })
|
||||
end,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
return {
|
||||
settings = {
|
||||
python = {
|
||||
analysis = {
|
||||
typeCheckingMode = "off",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
return {
|
||||
settings = {
|
||||
["rust-analyzer"] = {
|
||||
cargo = {
|
||||
loadOutDirsFromCheck = true,
|
||||
},
|
||||
checkOnSave = {
|
||||
command = "clippy",
|
||||
},
|
||||
experimental = {
|
||||
procAttrMacros = true,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
return {
|
||||
on_attach = astronvim.lsp.disable_formatting,
|
||||
settings = {
|
||||
Lua = {
|
||||
diagnostics = {
|
||||
globals = { "vim" },
|
||||
},
|
||||
workspace = {
|
||||
library = {
|
||||
[vim.fn.expand "$VIMRUNTIME/lua"] = true,
|
||||
[astronvim.install.home .. "/lua"] = true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
return { on_attach = astronvim.lsp.disable_formatting }
|
||||
@@ -0,0 +1,16 @@
|
||||
local user_settings = astronvim.user_plugin_opts "luasnip"
|
||||
local loader_avail, loader = pcall(require, "luasnip/loaders/from_vscode")
|
||||
if loader_avail then
|
||||
if user_settings.vscode_snippet_paths ~= nil then
|
||||
loader.lazy_load { paths = user_settings.vscode_snippet_paths }
|
||||
end
|
||||
loader.lazy_load()
|
||||
end
|
||||
local luasnip_avail, luasnip = pcall(require, "luasnip")
|
||||
if luasnip_avail then
|
||||
if type(user_settings.filetype_extend) == "table" then
|
||||
for filetype, snippets in pairs(user_settings.filetype_extend) do
|
||||
luasnip.filetype_extend(filetype, snippets)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,70 @@
|
||||
local status_ok, neotree = pcall(require, "neo-tree")
|
||||
if status_ok then
|
||||
neotree.setup(astronvim.user_plugin_opts("plugins.neo-tree", {
|
||||
close_if_last_window = true,
|
||||
popup_border_style = "rounded",
|
||||
enable_diagnostics = false,
|
||||
default_component_configs = {
|
||||
indent = {
|
||||
padding = 0,
|
||||
with_expanders = false,
|
||||
},
|
||||
icon = {
|
||||
folder_closed = "",
|
||||
folder_open = "",
|
||||
folder_empty = "",
|
||||
default = "",
|
||||
},
|
||||
git_status = {
|
||||
symbols = {
|
||||
added = "",
|
||||
deleted = "",
|
||||
modified = "",
|
||||
renamed = "➜",
|
||||
untracked = "★",
|
||||
ignored = "◌",
|
||||
unstaged = "✗",
|
||||
staged = "✓",
|
||||
conflict = "",
|
||||
},
|
||||
},
|
||||
},
|
||||
window = {
|
||||
width = 25,
|
||||
mappings = {
|
||||
["o"] = "open",
|
||||
},
|
||||
},
|
||||
filesystem = {
|
||||
filtered_items = {
|
||||
visible = false,
|
||||
hide_dotfiles = true,
|
||||
hide_gitignored = false,
|
||||
hide_by_name = {
|
||||
".DS_Store",
|
||||
"thumbs.db",
|
||||
"node_modules",
|
||||
"__pycache__",
|
||||
},
|
||||
},
|
||||
follow_current_file = true,
|
||||
hijack_netrw_behavior = "open_current",
|
||||
use_libuv_file_watcher = true,
|
||||
},
|
||||
git_status = {
|
||||
window = {
|
||||
position = "float",
|
||||
},
|
||||
},
|
||||
event_handlers = {
|
||||
{
|
||||
event = "vim_buffer_enter",
|
||||
handler = function(_)
|
||||
if vim.bo.filetype == "neo-tree" then
|
||||
vim.wo.signcolumn = "auto"
|
||||
end
|
||||
end,
|
||||
},
|
||||
},
|
||||
}))
|
||||
end
|
||||
@@ -0,0 +1,6 @@
|
||||
local status_ok, notify = pcall(require, "notify")
|
||||
if status_ok then
|
||||
notify.setup(astronvim.user_plugin_opts("plugins.notify", { stages = "fade" }))
|
||||
|
||||
vim.notify = notify
|
||||
end
|
||||
@@ -0,0 +1,4 @@
|
||||
local status_ok, null_ls = pcall(require, "null-ls")
|
||||
if status_ok then
|
||||
null_ls.setup(astronvim.user_plugin_opts "plugins.null-ls")
|
||||
end
|
||||
@@ -0,0 +1,12 @@
|
||||
local status_ok, lsp_installer = pcall(require, "nvim-lsp-installer")
|
||||
if status_ok then
|
||||
lsp_installer.setup(astronvim.user_plugin_opts("plugins.nvim-lsp-installer", {
|
||||
ui = {
|
||||
icons = {
|
||||
server_installed = "✓",
|
||||
server_uninstalled = "✗",
|
||||
server_pending = "⟳",
|
||||
},
|
||||
},
|
||||
}))
|
||||
end
|
||||
@@ -0,0 +1,4 @@
|
||||
local status_ok, session_manager = pcall(require, "session_manager")
|
||||
if status_ok then
|
||||
session_manager.setup(astronvim.user_plugin_opts("plugins.session_manager", { autosave_last_session = false }))
|
||||
end
|
||||
@@ -0,0 +1,12 @@
|
||||
local status_ok, smart_splits = pcall(require, "smart-splits")
|
||||
if status_ok then
|
||||
smart_splits.setup(astronvim.user_plugin_opts("plugins.smart-splits", {
|
||||
ignored_filetypes = {
|
||||
"nofile",
|
||||
"quickfix",
|
||||
"qf",
|
||||
"prompt",
|
||||
},
|
||||
ignored_buftypes = { "nofile" },
|
||||
}))
|
||||
end
|
||||
@@ -0,0 +1,96 @@
|
||||
local status_ok, telescope = pcall(require, "telescope")
|
||||
if status_ok then
|
||||
local actions = require "telescope.actions"
|
||||
|
||||
astronvim.conditional_func(telescope.load_extension, pcall(require, "notify"), "notify")
|
||||
astronvim.conditional_func(telescope.load_extension, pcall(require, "aerial"), "aerial")
|
||||
|
||||
telescope.setup(astronvim.user_plugin_opts("plugins.telescope", {
|
||||
defaults = {
|
||||
|
||||
prompt_prefix = " ",
|
||||
selection_caret = "❯ ",
|
||||
path_display = { "truncate" },
|
||||
selection_strategy = "reset",
|
||||
sorting_strategy = "ascending",
|
||||
layout_strategy = "horizontal",
|
||||
layout_config = {
|
||||
horizontal = {
|
||||
prompt_position = "top",
|
||||
preview_width = 0.55,
|
||||
results_width = 0.8,
|
||||
},
|
||||
vertical = {
|
||||
mirror = false,
|
||||
},
|
||||
width = 0.87,
|
||||
height = 0.80,
|
||||
preview_cutoff = 120,
|
||||
},
|
||||
|
||||
mappings = {
|
||||
i = {
|
||||
["<C-n>"] = actions.cycle_history_next,
|
||||
["<C-p>"] = actions.cycle_history_prev,
|
||||
|
||||
["<C-j>"] = actions.move_selection_next,
|
||||
["<C-k>"] = actions.move_selection_previous,
|
||||
|
||||
["<C-c>"] = actions.close,
|
||||
|
||||
["<Down>"] = actions.move_selection_next,
|
||||
["<Up>"] = actions.move_selection_previous,
|
||||
|
||||
["<CR>"] = actions.select_default,
|
||||
["<C-x>"] = actions.select_horizontal,
|
||||
["<C-v>"] = actions.select_vertical,
|
||||
["<C-t>"] = actions.select_tab,
|
||||
|
||||
["<C-u>"] = actions.preview_scrolling_up,
|
||||
["<C-d>"] = actions.preview_scrolling_down,
|
||||
|
||||
["<PageUp>"] = actions.results_scrolling_up,
|
||||
["<PageDown>"] = actions.results_scrolling_down,
|
||||
|
||||
["<Tab>"] = actions.toggle_selection + actions.move_selection_worse,
|
||||
["<S-Tab>"] = actions.toggle_selection + actions.move_selection_better,
|
||||
["<C-q>"] = actions.send_to_qflist + actions.open_qflist,
|
||||
["<M-q>"] = actions.send_selected_to_qflist + actions.open_qflist,
|
||||
["<C-l>"] = actions.complete_tag,
|
||||
},
|
||||
|
||||
n = {
|
||||
["<esc>"] = actions.close,
|
||||
["<CR>"] = actions.select_default,
|
||||
["<C-x>"] = actions.select_horizontal,
|
||||
["<C-v>"] = actions.select_vertical,
|
||||
["<C-t>"] = actions.select_tab,
|
||||
|
||||
["<Tab>"] = actions.toggle_selection + actions.move_selection_worse,
|
||||
["<S-Tab>"] = actions.toggle_selection + actions.move_selection_better,
|
||||
["<C-q>"] = actions.send_to_qflist + actions.open_qflist,
|
||||
["<M-q>"] = actions.send_selected_to_qflist + actions.open_qflist,
|
||||
|
||||
["j"] = actions.move_selection_next,
|
||||
["k"] = actions.move_selection_previous,
|
||||
["H"] = actions.move_to_top,
|
||||
["M"] = actions.move_to_middle,
|
||||
["L"] = actions.move_to_bottom,
|
||||
|
||||
["<Down>"] = actions.move_selection_next,
|
||||
["<Up>"] = actions.move_selection_previous,
|
||||
["gg"] = actions.move_to_top,
|
||||
["G"] = actions.move_to_bottom,
|
||||
|
||||
["<C-u>"] = actions.preview_scrolling_up,
|
||||
["<C-d>"] = actions.preview_scrolling_down,
|
||||
|
||||
["<PageUp>"] = actions.results_scrolling_up,
|
||||
["<PageDown>"] = actions.results_scrolling_down,
|
||||
},
|
||||
},
|
||||
},
|
||||
pickers = {},
|
||||
extensions = {},
|
||||
}))
|
||||
end
|
||||
@@ -0,0 +1,16 @@
|
||||
local status_ok, toggleterm = pcall(require, "toggleterm")
|
||||
if status_ok then
|
||||
toggleterm.setup(astronvim.user_plugin_opts("plugins.toggleterm", {
|
||||
size = 10,
|
||||
open_mapping = [[<c-\>]],
|
||||
shading_factor = 2,
|
||||
direction = "float",
|
||||
float_opts = {
|
||||
border = "curved",
|
||||
highlights = {
|
||||
border = "Normal",
|
||||
background = "Normal",
|
||||
},
|
||||
},
|
||||
}))
|
||||
end
|
||||
@@ -0,0 +1,26 @@
|
||||
local status_ok, treesitter = pcall(require, "nvim-treesitter.configs")
|
||||
if status_ok then
|
||||
treesitter.setup(astronvim.user_plugin_opts("plugins.treesitter", {
|
||||
ensure_installed = {},
|
||||
sync_install = false,
|
||||
ignore_install = {},
|
||||
highlight = {
|
||||
enable = true,
|
||||
additional_vim_regex_highlighting = false,
|
||||
},
|
||||
context_commentstring = {
|
||||
enable = true,
|
||||
enable_autocmd = false,
|
||||
},
|
||||
rainbow = {
|
||||
enable = true,
|
||||
disable = { "html" },
|
||||
extended_mode = false,
|
||||
max_file_lines = nil,
|
||||
},
|
||||
autopairs = { enable = true },
|
||||
autotag = { enable = true },
|
||||
incremental_selection = { enable = true },
|
||||
indent = { enable = false },
|
||||
}))
|
||||
end
|
||||
@@ -0,0 +1,61 @@
|
||||
local status_ok, which_key = pcall(require, "which-key")
|
||||
if status_ok then
|
||||
local is_available = astronvim.is_available
|
||||
local user_plugin_opts = astronvim.user_plugin_opts
|
||||
local mappings = {
|
||||
n = {
|
||||
["<leader>"] = {
|
||||
f = { name = "File" },
|
||||
p = { name = "Packer" },
|
||||
l = { name = "LSP" },
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
local extra_sections = {
|
||||
g = "Git",
|
||||
s = "Search",
|
||||
S = "Session",
|
||||
t = "Terminal",
|
||||
}
|
||||
|
||||
local function init_table(mode, prefix, idx)
|
||||
if not mappings[mode][prefix][idx] then
|
||||
mappings[mode][prefix][idx] = { name = extra_sections[idx] }
|
||||
end
|
||||
end
|
||||
|
||||
if is_available "neovim-session-manager" then
|
||||
init_table("n", "<leader>", "S")
|
||||
end
|
||||
|
||||
if is_available "gitsigns.nvim" then
|
||||
init_table("n", "<leader>", "g")
|
||||
end
|
||||
|
||||
if is_available "toggleterm.nvim" then
|
||||
init_table("n", "<leader>", "g")
|
||||
init_table("n", "<leader>", "t")
|
||||
end
|
||||
|
||||
if is_available "telescope.nvim" then
|
||||
init_table("n", "<leader>", "s")
|
||||
init_table("n", "<leader>", "g")
|
||||
end
|
||||
|
||||
mappings = user_plugin_opts("which-key.register_mappings", mappings)
|
||||
-- support previous legacy notation, deprecate at some point
|
||||
mappings.n["<leader>"] = user_plugin_opts("which-key.register_n_leader", mappings.n["<leader>"])
|
||||
for mode, prefixes in pairs(mappings) do
|
||||
for prefix, mapping_table in pairs(prefixes) do
|
||||
which_key.register(mapping_table, {
|
||||
mode = mode,
|
||||
prefix = prefix,
|
||||
buffer = nil,
|
||||
silent = true,
|
||||
noremap = true,
|
||||
nowait = true,
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,21 @@
|
||||
local status_ok, which_key = pcall(require, "which-key")
|
||||
if status_ok then
|
||||
local show = which_key.show
|
||||
local show_override = astronvim.user_plugin_opts("which-key.show", nil, false)
|
||||
which_key.show = type(show_override) == "function" and show_override(show)
|
||||
or function(keys, opts)
|
||||
if vim.bo.filetype ~= "TelescopePrompt" then
|
||||
show(keys, opts)
|
||||
end
|
||||
end
|
||||
which_key.setup(astronvim.user_plugin_opts("plugins.which-key", {
|
||||
plugins = {
|
||||
spelling = { enabled = true },
|
||||
presets = { operators = false },
|
||||
},
|
||||
window = {
|
||||
border = "rounded",
|
||||
padding = { 2, 2, 2, 2 },
|
||||
},
|
||||
}))
|
||||
end
|
||||
@@ -0,0 +1,104 @@
|
||||
local is_available = astronvim.is_available
|
||||
local cmd = vim.api.nvim_create_autocmd
|
||||
local augroup = vim.api.nvim_create_augroup
|
||||
local create_command = vim.api.nvim_create_user_command
|
||||
|
||||
augroup("highlighturl", { clear = true })
|
||||
cmd({ "VimEnter", "FileType", "BufEnter", "WinEnter" }, {
|
||||
desc = "URL Highlighting",
|
||||
group = "highlighturl",
|
||||
pattern = "*",
|
||||
callback = function()
|
||||
astronvim.set_url_match()
|
||||
end,
|
||||
})
|
||||
|
||||
if is_available "alpha-nvim" then
|
||||
augroup("alpha_settings", { clear = true })
|
||||
if is_available "bufferline.nvim" then
|
||||
cmd("FileType", {
|
||||
desc = "Disable tabline for alpha",
|
||||
group = "alpha_settings",
|
||||
pattern = "alpha",
|
||||
callback = function()
|
||||
local prev_showtabline = vim.opt.showtabline
|
||||
vim.opt.showtabline = 0
|
||||
cmd("BufUnload", {
|
||||
pattern = "<buffer>",
|
||||
callback = function()
|
||||
vim.opt.showtabline = prev_showtabline
|
||||
end,
|
||||
})
|
||||
end,
|
||||
})
|
||||
end
|
||||
cmd("FileType", {
|
||||
desc = "Disable statusline for alpha",
|
||||
group = "alpha_settings",
|
||||
pattern = "alpha",
|
||||
callback = function()
|
||||
local prev_status = vim.opt.laststatus
|
||||
vim.opt.laststatus = 0
|
||||
cmd("BufUnload", {
|
||||
pattern = "<buffer>",
|
||||
callback = function()
|
||||
vim.opt.laststatus = prev_status
|
||||
end,
|
||||
})
|
||||
end,
|
||||
})
|
||||
cmd("VimEnter", {
|
||||
desc = "Start Alpha when vim is opened with no arguments",
|
||||
group = "alpha_settings",
|
||||
callback = function()
|
||||
-- optimized start check from https://github.com/goolord/alpha-nvim
|
||||
local alpha_avail, alpha = pcall(require, "alpha")
|
||||
if alpha_avail then
|
||||
local should_skip = false
|
||||
if vim.fn.argc() > 0 or vim.fn.line2byte "$" ~= -1 or not vim.o.modifiable then
|
||||
should_skip = true
|
||||
else
|
||||
for _, arg in pairs(vim.v.argv) do
|
||||
if arg == "-b" or arg == "-c" or vim.startswith(arg, "+") or arg == "-S" then
|
||||
should_skip = true
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
if not should_skip then
|
||||
alpha.start(true)
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
if is_available "neo-tree.nvim" then
|
||||
augroup("neotree_start", { clear = true })
|
||||
cmd("BufEnter", {
|
||||
desc = "Open Neo-Tree on startup with directory",
|
||||
group = "neotree_start",
|
||||
callback = function()
|
||||
local stats = vim.loop.fs_stat(vim.api.nvim_buf_get_name(0))
|
||||
if stats and stats.type == "directory" then
|
||||
require("neo-tree.setup.netrw").hijack()
|
||||
end
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
if is_available "feline.nvim" then
|
||||
augroup("feline_setup", { clear = true })
|
||||
cmd("ColorScheme", {
|
||||
desc = "Reload feline on colorscheme change",
|
||||
group = "feline_setup",
|
||||
callback = function()
|
||||
package.loaded["configs.feline"] = nil
|
||||
require "configs.feline"
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
create_command("AstroUpdate", astronvim.updater.update, { desc = "Update AstroNvim" })
|
||||
create_command("AstroVersion", astronvim.updater.version, { desc = "Check AstroNvim Version" })
|
||||
create_command("ToggleHighlightURL", astronvim.toggle_url_match, { desc = "Toggle URL Highlights" })
|
||||
@@ -0,0 +1,420 @@
|
||||
local is_available = astronvim.is_available
|
||||
|
||||
local maps = { n = {}, v = {}, t = {}, [""] = {} }
|
||||
|
||||
maps[""]["<Space>"] = "<Nop>"
|
||||
|
||||
-- Normal --
|
||||
-- Standard Operations
|
||||
maps.n["<leader>w"] = { "<cmd>w<cr>", desc = "Save" }
|
||||
maps.n["<leader>q"] = { "<cmd>q<cr>", desc = "Quit" }
|
||||
maps.n["<leader>h"] = { "<cmd>nohlsearch<cr>", desc = "No Highlight" }
|
||||
maps.n["<leader>u"] = {
|
||||
function()
|
||||
astronvim.toggle_url_match()
|
||||
end,
|
||||
desc = "Toggle URL Highlights",
|
||||
}
|
||||
maps.n["<leader>fn"] = { "<cmd>enew<cr>", desc = "New File" }
|
||||
maps.n["gx"] = {
|
||||
function()
|
||||
astronvim.url_opener()
|
||||
end,
|
||||
desc = "Open the file under cursor with system app",
|
||||
}
|
||||
maps.n["<C-s>"] = { "<cmd>w!<cr>", desc = "Force write" }
|
||||
maps.n["<C-q>"] = { "<cmd>q!<cr>", desc = "Force quit" }
|
||||
maps.n["Q"] = "<Nop>"
|
||||
|
||||
-- Packer
|
||||
maps.n["<leader>pc"] = { "<cmd>PackerCompile<cr>", desc = "Packer Compile" }
|
||||
maps.n["<leader>pi"] = { "<cmd>PackerInstall<cr>", desc = "Packer Install" }
|
||||
maps.n["<leader>ps"] = { "<cmd>PackerSync<cr>", desc = "Packer Sync" }
|
||||
maps.n["<leader>pS"] = { "<cmd>PackerStatus<cr>", desc = "Packer Status" }
|
||||
maps.n["<leader>pu"] = { "<cmd>PackerUpdate<cr>", desc = "Packer Update" }
|
||||
|
||||
-- Alpha
|
||||
if is_available "alpha-nvim" then
|
||||
maps.n["<leader>d"] = { "<cmd>Alpha<cr>", desc = "Alpha Dashboard" }
|
||||
end
|
||||
|
||||
-- Bufdelete
|
||||
if is_available "bufdelete.nvim" then
|
||||
maps.n["<leader>c"] = { "<cmd>Bdelete<cr>", desc = "Close buffer" }
|
||||
else
|
||||
maps.n["<leader>c"] = { "<cmd>bdelete<cr>", desc = "Close buffer" }
|
||||
end
|
||||
|
||||
-- Navigate buffers
|
||||
if is_available "bufferline.nvim" then
|
||||
maps.n["<S-l>"] = { "<cmd>BufferLineCycleNext<cr>", desc = "Next buffer tab" }
|
||||
maps.n["<S-h>"] = { "<cmd>BufferLineCyclePrev<cr>", desc = "Previous buffer tab" }
|
||||
maps.n[">b"] = { "<cmd>BufferLineMoveNext<cr>", desc = "Move buffer tab right" }
|
||||
maps.n["<b"] = { "<cmd>BufferLineMovePrev<cr>", desc = "Move buffer tab left" }
|
||||
else
|
||||
maps.n["<S-l>"] = { "<cmd>bnext<cr>", desc = "Next buffer" }
|
||||
maps.n["<S-h>"] = { "<cmd>bprevious<cr>", desc = "Previous buffer" }
|
||||
end
|
||||
|
||||
-- Comment
|
||||
if is_available "Comment.nvim" then
|
||||
maps.n["<leader>/"] = {
|
||||
function()
|
||||
require("Comment.api").toggle_current_linewise()
|
||||
end,
|
||||
desc = "Comment line",
|
||||
}
|
||||
maps.v["<leader>/"] = {
|
||||
"<esc><cmd>lua require('Comment.api').toggle_linewise_op(vim.fn.visualmode())<cr>",
|
||||
desc = "Toggle comment line",
|
||||
}
|
||||
end
|
||||
|
||||
-- GitSigns
|
||||
if is_available "gitsigns.nvim" then
|
||||
maps.n["<leader>gj"] = {
|
||||
function()
|
||||
require("gitsigns").next_hunk()
|
||||
end,
|
||||
desc = "Next git hunk",
|
||||
}
|
||||
maps.n["<leader>gk"] = {
|
||||
function()
|
||||
require("gitsigns").prev_hunk()
|
||||
end,
|
||||
desc = "Previous git hunk",
|
||||
}
|
||||
maps.n["<leader>gl"] = {
|
||||
function()
|
||||
require("gitsigns").blame_line()
|
||||
end,
|
||||
desc = "View git blame",
|
||||
}
|
||||
maps.n["<leader>gp"] = {
|
||||
function()
|
||||
require("gitsigns").preview_hunk()
|
||||
end,
|
||||
desc = "Preview git hunk",
|
||||
}
|
||||
maps.n["<leader>gh"] = {
|
||||
function()
|
||||
require("gitsigns").reset_hunk()
|
||||
end,
|
||||
desc = "Reset git hunk",
|
||||
}
|
||||
maps.n["<leader>gr"] = {
|
||||
function()
|
||||
require("gitsigns").reset_buffer()
|
||||
end,
|
||||
desc = "Reset git buffer",
|
||||
}
|
||||
maps.n["<leader>gs"] = {
|
||||
function()
|
||||
require("gitsigns").stage_hunk()
|
||||
end,
|
||||
desc = "Stage git hunk",
|
||||
}
|
||||
maps.n["<leader>gu"] = {
|
||||
function()
|
||||
require("gitsigns").undo_stage_hunk()
|
||||
end,
|
||||
desc = "Unstage git hunk",
|
||||
}
|
||||
maps.n["<leader>gd"] = {
|
||||
function()
|
||||
require("gitsigns").diffthis()
|
||||
end,
|
||||
desc = "View git diff",
|
||||
}
|
||||
end
|
||||
|
||||
-- NeoTree
|
||||
if is_available "neo-tree.nvim" then
|
||||
maps.n["<leader>e"] = { "<cmd>Neotree toggle<cr>", desc = "Toggle Explorer" }
|
||||
maps.n["<leader>o"] = { "<cmd>Neotree focus<cr>", desc = "Focus Explorer" }
|
||||
end
|
||||
|
||||
-- Session Manager
|
||||
if is_available "neovim-session-manager" then
|
||||
maps.n["<leader>Sl"] = { "<cmd>SessionManager! load_last_session<cr>", desc = "Load last session" }
|
||||
maps.n["<leader>Ss"] = { "<cmd>SessionManager! save_current_session<cr>", desc = "Save this session" }
|
||||
maps.n["<leader>Sd"] = { "<cmd>SessionManager! delete_session<cr>", desc = "Delete session" }
|
||||
maps.n["<leader>Sf"] = { "<cmd>SessionManager! load_session<cr>", desc = "Search sessions" }
|
||||
maps.n["<leader>S."] = {
|
||||
"<cmd>SessionManager! load_current_dir_session<cr>",
|
||||
desc = "Load current directory session",
|
||||
}
|
||||
end
|
||||
|
||||
-- LSP Installer
|
||||
if is_available "nvim-lsp-installer" then
|
||||
maps.n["<leader>li"] = { "<cmd>LspInfo<cr>", desc = "LSP information" }
|
||||
maps.n["<leader>lI"] = { "<cmd>LspInstallInfo<cr>", desc = "LSP installer" }
|
||||
end
|
||||
|
||||
-- Smart Splits
|
||||
if is_available "smart-splits.nvim" then
|
||||
-- Better window navigation
|
||||
maps.n["<C-h>"] = {
|
||||
function()
|
||||
require("smart-splits").move_cursor_left()
|
||||
end,
|
||||
desc = "Move to left split",
|
||||
}
|
||||
maps.n["<C-j>"] = {
|
||||
function()
|
||||
require("smart-splits").move_cursor_down()
|
||||
end,
|
||||
desc = "Move to below split",
|
||||
}
|
||||
maps.n["<C-k>"] = {
|
||||
function()
|
||||
require("smart-splits").move_cursor_up()
|
||||
end,
|
||||
desc = "Move to above split",
|
||||
}
|
||||
maps.n["<C-l>"] = {
|
||||
function()
|
||||
require("smart-splits").move_cursor_right()
|
||||
end,
|
||||
desc = "Move to right split",
|
||||
}
|
||||
|
||||
-- Resize with arrows
|
||||
maps.n["<C-Up>"] = {
|
||||
function()
|
||||
require("smart-splits").resize_up()
|
||||
end,
|
||||
desc = "Resize split up",
|
||||
}
|
||||
maps.n["<C-Down>"] = {
|
||||
function()
|
||||
require("smart-splits").resize_down()
|
||||
end,
|
||||
desc = "Resize split down",
|
||||
}
|
||||
maps.n["<C-Left>"] = {
|
||||
function()
|
||||
require("smart-splits").resize_left()
|
||||
end,
|
||||
desc = "Resize split left",
|
||||
}
|
||||
maps.n["<C-Right>"] = {
|
||||
function()
|
||||
require("smart-splits").resize_right()
|
||||
end,
|
||||
desc = "Resize split right",
|
||||
}
|
||||
else
|
||||
maps.n["<C-h>"] = { "<C-w>h", desc = "Move to left split" }
|
||||
maps.n["<C-j>"] = { "<C-w>j", desc = "Move to below split" }
|
||||
maps.n["<C-k>"] = { "<C-w>k", desc = "Move to above split" }
|
||||
maps.n["<C-l>"] = { "<C-w>l", desc = "Move to right split" }
|
||||
maps.n["<C-Up>"] = { "<cmd>resize -2<CR>", desc = "Resize split up" }
|
||||
maps.n["<C-Down>"] = { "<cmd>resize +2<CR>", desc = "Resize split down" }
|
||||
maps.n["<C-Left>"] = { "<cmd>vertical resize -2<CR>", desc = "Resize split left" }
|
||||
maps.n["<C-Right>"] = { "<cmd>vertical resize +2<CR>", desc = "Resize split right" }
|
||||
end
|
||||
|
||||
-- SymbolsOutline
|
||||
if is_available "aerial.nvim" then
|
||||
maps.n["<leader>lS"] = { "<cmd>AerialToggle<cr>", desc = "Symbols outline" }
|
||||
end
|
||||
|
||||
-- Telescope
|
||||
if is_available "telescope.nvim" then
|
||||
maps.n["<leader>fw"] = {
|
||||
function()
|
||||
require("telescope.builtin").live_grep()
|
||||
end,
|
||||
desc = "Search words",
|
||||
}
|
||||
maps.n["<leader>fW"] = {
|
||||
function()
|
||||
require("telescope.builtin").live_grep {
|
||||
additional_args = function(args)
|
||||
return vim.list_extend(args, { "--hidden", "--no-ignore" })
|
||||
end,
|
||||
}
|
||||
end,
|
||||
desc = "Search words in all files",
|
||||
}
|
||||
maps.n["<leader>gt"] = {
|
||||
function()
|
||||
require("telescope.builtin").git_status()
|
||||
end,
|
||||
desc = "Git status",
|
||||
}
|
||||
maps.n["<leader>gb"] = {
|
||||
function()
|
||||
require("telescope.builtin").git_branches()
|
||||
end,
|
||||
desc = "Git branches",
|
||||
}
|
||||
maps.n["<leader>gc"] = {
|
||||
function()
|
||||
require("telescope.builtin").git_commits()
|
||||
end,
|
||||
desc = "Git commits",
|
||||
}
|
||||
maps.n["<leader>ff"] = {
|
||||
function()
|
||||
require("telescope.builtin").find_files()
|
||||
end,
|
||||
desc = "Search files",
|
||||
}
|
||||
maps.n["<leader>fF"] = {
|
||||
function()
|
||||
require("telescope.builtin").find_files { hidden = true, no_ignore = true }
|
||||
end,
|
||||
desc = "Search all files",
|
||||
}
|
||||
maps.n["<leader>fb"] = {
|
||||
function()
|
||||
require("telescope.builtin").buffers()
|
||||
end,
|
||||
desc = "Search buffers",
|
||||
}
|
||||
maps.n["<leader>fh"] = {
|
||||
function()
|
||||
require("telescope.builtin").help_tags()
|
||||
end,
|
||||
desc = "Search help",
|
||||
}
|
||||
maps.n["<leader>fm"] = {
|
||||
function()
|
||||
require("telescope.builtin").marks()
|
||||
end,
|
||||
desc = "Search marks",
|
||||
}
|
||||
maps.n["<leader>fo"] = {
|
||||
function()
|
||||
require("telescope.builtin").oldfiles()
|
||||
end,
|
||||
desc = "Search history",
|
||||
}
|
||||
maps.n["<leader>sb"] = {
|
||||
function()
|
||||
require("telescope.builtin").git_branches()
|
||||
end,
|
||||
desc = "Git branches",
|
||||
}
|
||||
maps.n["<leader>sh"] = {
|
||||
function()
|
||||
require("telescope.builtin").help_tags()
|
||||
end,
|
||||
desc = "Search help",
|
||||
}
|
||||
maps.n["<leader>sm"] = {
|
||||
function()
|
||||
require("telescope.builtin").man_pages()
|
||||
end,
|
||||
desc = "Search man",
|
||||
}
|
||||
maps.n["<leader>sn"] = {
|
||||
function()
|
||||
require("telescope").extensions.notify.notify()
|
||||
end,
|
||||
desc = "Search notifications",
|
||||
}
|
||||
maps.n["<leader>sr"] = {
|
||||
function()
|
||||
require("telescope.builtin").registers()
|
||||
end,
|
||||
desc = "Search registers",
|
||||
}
|
||||
maps.n["<leader>sk"] = {
|
||||
function()
|
||||
require("telescope.builtin").keymaps()
|
||||
end,
|
||||
desc = "Search keymaps",
|
||||
}
|
||||
maps.n["<leader>sc"] = {
|
||||
function()
|
||||
require("telescope.builtin").commands()
|
||||
end,
|
||||
desc = "Search commands",
|
||||
}
|
||||
maps.n["<leader>ls"] = {
|
||||
function()
|
||||
local aerial_avail, _ = pcall(require, "aerial")
|
||||
if aerial_avail then
|
||||
require("telescope").extensions.aerial.aerial()
|
||||
else
|
||||
require("telescope.builtin").lsp_document_symbols()
|
||||
end
|
||||
end,
|
||||
desc = "Search symbols",
|
||||
}
|
||||
maps.n["<leader>lR"] = {
|
||||
function()
|
||||
require("telescope.builtin").lsp_references()
|
||||
end,
|
||||
desc = "Search references",
|
||||
}
|
||||
maps.n["<leader>lD"] = {
|
||||
function()
|
||||
require("telescope.builtin").diagnostics()
|
||||
end,
|
||||
desc = "Search diagnostics",
|
||||
}
|
||||
end
|
||||
|
||||
-- Terminal
|
||||
if is_available "toggleterm.nvim" then
|
||||
local toggle_term_cmd = astronvim.toggle_term_cmd
|
||||
maps.n["<C-\\>"] = { "<cmd>ToggleTerm<cr>", desc = "Toggle terminal" }
|
||||
maps.n["<leader>gg"] = {
|
||||
function()
|
||||
toggle_term_cmd "lazygit"
|
||||
end,
|
||||
desc = "ToggleTerm lazygit",
|
||||
}
|
||||
maps.n["<leader>tn"] = {
|
||||
function()
|
||||
toggle_term_cmd "node"
|
||||
end,
|
||||
desc = "ToggleTerm node",
|
||||
}
|
||||
maps.n["<leader>tu"] = {
|
||||
function()
|
||||
toggle_term_cmd "ncdu"
|
||||
end,
|
||||
desc = "ToggleTerm NCDU",
|
||||
}
|
||||
maps.n["<leader>tt"] = {
|
||||
function()
|
||||
toggle_term_cmd "htop"
|
||||
end,
|
||||
desc = "ToggleTerm htop",
|
||||
}
|
||||
maps.n["<leader>tp"] = {
|
||||
function()
|
||||
toggle_term_cmd "python"
|
||||
end,
|
||||
desc = "ToggleTerm python",
|
||||
}
|
||||
maps.n["<leader>tl"] = {
|
||||
function()
|
||||
toggle_term_cmd "lazygit"
|
||||
end,
|
||||
desc = "ToggleTerm lazygit",
|
||||
}
|
||||
maps.n["<leader>tf"] = { "<cmd>ToggleTerm direction=float<cr>", desc = "ToggleTerm float" }
|
||||
maps.n["<leader>th"] = { "<cmd>ToggleTerm size=10 direction=horizontal<cr>", desc = "ToggleTerm horizontal split" }
|
||||
maps.n["<leader>tv"] = { "<cmd>ToggleTerm size=80 direction=vertical<cr>", desc = "ToggleTerm vertical split" }
|
||||
end
|
||||
|
||||
-- Stay in indent mode
|
||||
maps.v["<"] = { "<gv", desc = "unindent line" }
|
||||
maps.v[">"] = { ">gv", desc = "indent line" }
|
||||
|
||||
-- Improved Terminal Mappings
|
||||
maps.t["<esc>"] = { "<C-\\><C-n>", desc = "Terminal normal mode" }
|
||||
maps.t["jk"] = { "<C-\\><C-n>", desc = "Terminal normal mode" }
|
||||
maps.t["<C-h>"] = { "<c-\\><c-n><c-w>h", desc = "Terminal left window navigation" }
|
||||
maps.t["<C-j>"] = { "<c-\\><c-n><c-w>j", desc = "Terminal down window navigation" }
|
||||
maps.t["<C-k>"] = { "<c-\\><c-n><c-w>k", desc = "Terminal up window navigation" }
|
||||
maps.t["<C-l>"] = { "<c-\\><c-n><c-w>l", desc = "Terminal right window naviation" }
|
||||
|
||||
astronvim.set_mappings(astronvim.user_plugin_opts("mappings", maps))
|
||||
@@ -0,0 +1,67 @@
|
||||
astronvim.vim_opts(astronvim.user_plugin_opts("options", {
|
||||
opt = {
|
||||
backspace = vim.opt.backspace + { "nostop" }, -- Don't stop backspace at insert
|
||||
clipboard = "unnamedplus", -- Connection to the system clipboard
|
||||
completeopt = { "menuone", "noselect" }, -- Options for insert mode completion
|
||||
copyindent = true, -- Copy the previous indentation on autoindenting
|
||||
cursorline = true, -- Highlight the text line of the cursor
|
||||
expandtab = true, -- Enable the use of space in tab
|
||||
fileencoding = "utf-8", -- File content encoding for the buffer
|
||||
fillchars = { eob = " " }, -- Disable `~` on nonexistent lines
|
||||
history = 100, -- Number of commands to remember in a history table
|
||||
ignorecase = true, -- Case insensitive searching
|
||||
laststatus = 3, -- globalstatus
|
||||
lazyredraw = true, -- lazily redraw screen
|
||||
mouse = "a", -- Enable mouse support
|
||||
number = true, -- Show numberline
|
||||
preserveindent = true, -- Preserve indent structure as much as possible
|
||||
pumheight = 10, -- Height of the pop up menu
|
||||
relativenumber = true, -- Show relative numberline
|
||||
scrolloff = 8, -- Number of lines to keep above and below the cursor
|
||||
shiftwidth = 2, -- Number of space inserted for indentation
|
||||
showmode = false, -- Disable showing modes in command line
|
||||
sidescrolloff = 8, -- Number of columns to keep at the sides of the cursor
|
||||
signcolumn = "yes", -- Always show the sign column
|
||||
smartcase = true, -- Case sensitivie searching
|
||||
splitbelow = true, -- Splitting a new window below the current one
|
||||
splitright = true, -- Splitting a new window at the right of the current one
|
||||
swapfile = false, -- Disable use of swapfile for the buffer
|
||||
tabstop = 2, -- Number of space in a tab
|
||||
termguicolors = true, -- Enable 24-bit RGB color in the TUI
|
||||
timeoutlen = 300, -- Length of time to wait for a mapped sequence
|
||||
undofile = true, -- Enable persistent undo
|
||||
updatetime = 300, -- Length of time to wait before triggering the plugin
|
||||
wrap = false, -- Disable wrapping of lines longer than the width of window
|
||||
writebackup = false, -- Disable making a backup before overwriting a file
|
||||
},
|
||||
g = {
|
||||
do_filetype_lua = 1, -- use filetype.lua
|
||||
did_load_filetypes = 0, -- don't use filetype.vim
|
||||
highlighturl_enabled = true, -- highlight URLs by default
|
||||
mapleader = " ", -- set leader key
|
||||
zipPlugin = false, -- disable zip
|
||||
load_black = false, -- disable black
|
||||
loaded_2html_plugin = true, -- disable 2html
|
||||
loaded_getscript = true, -- disable getscript
|
||||
loaded_getscriptPlugin = true, -- disable getscript
|
||||
loaded_gzip = true, -- disable gzip
|
||||
loaded_logipat = true, -- disable logipat
|
||||
loaded_matchit = true, -- disable matchit
|
||||
loaded_netrwFileHandlers = true, -- disable netrw
|
||||
loaded_netrwPlugin = true, -- disable netrw
|
||||
loaded_netrwSettngs = true, -- disable netrw
|
||||
loaded_remote_plugins = true, -- disable remote plugins
|
||||
loaded_tar = true, -- disable tar
|
||||
loaded_tarPlugin = true, -- disable tar
|
||||
loaded_zip = true, -- disable zip
|
||||
loaded_zipPlugin = true, -- disable zip
|
||||
loaded_vimball = true, -- disable vimball
|
||||
loaded_vimballPlugin = true, -- disable vimball
|
||||
},
|
||||
}))
|
||||
|
||||
local colorscheme = astronvim.user_plugin_opts("colorscheme", nil, false)
|
||||
vim.api.nvim_command(
|
||||
"colorscheme "
|
||||
.. (vim.tbl_contains(vim.fn.getcompletion("", "color"), colorscheme) and colorscheme or "default_theme")
|
||||
)
|
||||
@@ -0,0 +1,354 @@
|
||||
local astro_plugins = {
|
||||
-- Plugin manager
|
||||
["wbthomason/packer.nvim"] = {},
|
||||
|
||||
-- Optimiser
|
||||
["lewis6991/impatient.nvim"] = {},
|
||||
|
||||
-- Lua functions
|
||||
["nvim-lua/plenary.nvim"] = { module = "plenary" },
|
||||
|
||||
-- Popup API
|
||||
["nvim-lua/popup.nvim"] = {},
|
||||
|
||||
-- Indent detection
|
||||
["Darazaki/indent-o-matic"] = {
|
||||
event = "BufReadPost",
|
||||
config = function()
|
||||
require "configs.indent-o-matic"
|
||||
end,
|
||||
},
|
||||
|
||||
-- Notification Enhancer
|
||||
["rcarriga/nvim-notify"] = {
|
||||
event = "VimEnter",
|
||||
config = function()
|
||||
require "configs.notify"
|
||||
end,
|
||||
},
|
||||
|
||||
-- Neovim UI Enhancer
|
||||
["MunifTanjim/nui.nvim"] = { module = "nui" },
|
||||
|
||||
-- Cursorhold fix
|
||||
["antoinemadec/FixCursorHold.nvim"] = {
|
||||
event = { "BufRead", "BufNewFile" },
|
||||
config = function()
|
||||
vim.g.cursorhold_updatetime = 100
|
||||
end,
|
||||
},
|
||||
|
||||
-- Smarter Splits
|
||||
["mrjones2014/smart-splits.nvim"] = {
|
||||
module = "smart-splits",
|
||||
config = function()
|
||||
require "configs.smart-splits"
|
||||
end,
|
||||
},
|
||||
|
||||
-- Icons
|
||||
["kyazdani42/nvim-web-devicons"] = {
|
||||
event = "VimEnter",
|
||||
config = function()
|
||||
require "configs.icons"
|
||||
end,
|
||||
},
|
||||
|
||||
-- Bufferline
|
||||
["akinsho/bufferline.nvim"] = {
|
||||
after = "nvim-web-devicons",
|
||||
config = function()
|
||||
require "configs.bufferline"
|
||||
end,
|
||||
},
|
||||
|
||||
-- Better buffer closing
|
||||
["famiu/bufdelete.nvim"] = { cmd = { "Bdelete", "Bwipeout" } },
|
||||
|
||||
-- File explorer
|
||||
["nvim-neo-tree/neo-tree.nvim"] = {
|
||||
branch = "v2.x",
|
||||
module = "neo-tree",
|
||||
cmd = "Neotree",
|
||||
requires = { "MunifTanjim/nui.nvim", "nvim-lua/plenary.nvim" },
|
||||
setup = function()
|
||||
vim.g.neo_tree_remove_legacy_commands = true
|
||||
end,
|
||||
config = function()
|
||||
require "configs.neo-tree"
|
||||
end,
|
||||
},
|
||||
|
||||
-- Statusline
|
||||
["feline-nvim/feline.nvim"] = {
|
||||
after = "nvim-web-devicons",
|
||||
config = function()
|
||||
require "configs.feline"
|
||||
end,
|
||||
},
|
||||
|
||||
-- Parenthesis highlighting
|
||||
["p00f/nvim-ts-rainbow"] = { after = "nvim-treesitter" },
|
||||
|
||||
-- Autoclose tags
|
||||
["windwp/nvim-ts-autotag"] = { after = "nvim-treesitter" },
|
||||
|
||||
-- Context based commenting
|
||||
["JoosepAlviste/nvim-ts-context-commentstring"] = { after = "nvim-treesitter" },
|
||||
|
||||
-- Syntax highlighting
|
||||
["nvim-treesitter/nvim-treesitter"] = {
|
||||
run = ":TSUpdate",
|
||||
event = { "BufRead", "BufNewFile" },
|
||||
cmd = {
|
||||
"TSInstall",
|
||||
"TSInstallInfo",
|
||||
"TSInstallSync",
|
||||
"TSUninstall",
|
||||
"TSUpdate",
|
||||
"TSUpdateSync",
|
||||
"TSDisableAll",
|
||||
"TSEnableAll",
|
||||
},
|
||||
config = function()
|
||||
require "configs.treesitter"
|
||||
end,
|
||||
},
|
||||
|
||||
-- Snippet collection
|
||||
["rafamadriz/friendly-snippets"] = { opt = true },
|
||||
|
||||
-- Snippet engine
|
||||
["L3MON4D3/LuaSnip"] = {
|
||||
module = "luasnip",
|
||||
wants = "friendly-snippets",
|
||||
config = function()
|
||||
require "configs.luasnip"
|
||||
end,
|
||||
},
|
||||
|
||||
-- Completion engine
|
||||
["hrsh7th/nvim-cmp"] = {
|
||||
event = "InsertEnter",
|
||||
config = function()
|
||||
require "configs.cmp"
|
||||
end,
|
||||
},
|
||||
|
||||
-- Snippet completion source
|
||||
["saadparwaiz1/cmp_luasnip"] = {
|
||||
after = "nvim-cmp",
|
||||
config = function()
|
||||
astronvim.add_user_cmp_source "luasnip"
|
||||
end,
|
||||
},
|
||||
|
||||
-- Buffer completion source
|
||||
["hrsh7th/cmp-buffer"] = {
|
||||
after = "nvim-cmp",
|
||||
config = function()
|
||||
astronvim.add_user_cmp_source "buffer"
|
||||
end,
|
||||
},
|
||||
|
||||
-- Path completion source
|
||||
["hrsh7th/cmp-path"] = {
|
||||
after = "nvim-cmp",
|
||||
config = function()
|
||||
astronvim.add_user_cmp_source "path"
|
||||
end,
|
||||
},
|
||||
|
||||
-- LSP completion source
|
||||
["hrsh7th/cmp-nvim-lsp"] = {
|
||||
after = "nvim-cmp",
|
||||
config = function()
|
||||
astronvim.add_user_cmp_source "nvim_lsp"
|
||||
end,
|
||||
},
|
||||
|
||||
-- Built-in LSP
|
||||
["neovim/nvim-lspconfig"] = { event = "VimEnter" },
|
||||
|
||||
-- LSP manager
|
||||
["williamboman/nvim-lsp-installer"] = {
|
||||
after = "nvim-lspconfig",
|
||||
config = function()
|
||||
require "configs.nvim-lsp-installer"
|
||||
require "configs.lsp"
|
||||
end,
|
||||
},
|
||||
|
||||
-- LSP symbols
|
||||
["stevearc/aerial.nvim"] = {
|
||||
module = "aerial",
|
||||
cmd = { "AerialToggle", "AerialOpen", "AerialInfo" },
|
||||
config = function()
|
||||
require "configs.aerial"
|
||||
end,
|
||||
},
|
||||
|
||||
-- Formatting and linting
|
||||
["jose-elias-alvarez/null-ls.nvim"] = {
|
||||
event = { "BufRead", "BufNewFile" },
|
||||
config = function()
|
||||
require "configs.null-ls"
|
||||
end,
|
||||
},
|
||||
|
||||
-- Fuzzy finder
|
||||
["nvim-telescope/telescope.nvim"] = {
|
||||
cmd = "Telescope",
|
||||
module = "telescope",
|
||||
config = function()
|
||||
require "configs.telescope"
|
||||
end,
|
||||
},
|
||||
|
||||
-- Fuzzy finder syntax support
|
||||
[("nvim-telescope/telescope-%s-native.nvim"):format(vim.fn.has "win32" == 1 and "fzy" or "fzf")] = {
|
||||
after = "telescope.nvim",
|
||||
run = vim.fn.has "win32" ~= 1 and "make" or nil,
|
||||
config = function()
|
||||
require("telescope").load_extension(vim.fn.has "win32" == 1 and "fzy_native" or "fzf")
|
||||
end,
|
||||
},
|
||||
|
||||
-- Git integration
|
||||
["lewis6991/gitsigns.nvim"] = {
|
||||
event = "BufEnter",
|
||||
config = function()
|
||||
require "configs.gitsigns"
|
||||
end,
|
||||
},
|
||||
|
||||
-- Start screen
|
||||
["goolord/alpha-nvim"] = {
|
||||
cmd = "Alpha",
|
||||
module = "alpha",
|
||||
config = function()
|
||||
require "configs.alpha"
|
||||
end,
|
||||
},
|
||||
|
||||
-- Color highlighting
|
||||
["norcalli/nvim-colorizer.lua"] = {
|
||||
event = { "BufRead", "BufNewFile" },
|
||||
config = function()
|
||||
require "configs.colorizer"
|
||||
end,
|
||||
},
|
||||
|
||||
-- Autopairs
|
||||
["windwp/nvim-autopairs"] = {
|
||||
event = "InsertEnter",
|
||||
config = function()
|
||||
require "configs.autopairs"
|
||||
end,
|
||||
},
|
||||
|
||||
-- Terminal
|
||||
["akinsho/toggleterm.nvim"] = {
|
||||
cmd = "ToggleTerm",
|
||||
module = { "toggleterm", "toggleterm.terminal" },
|
||||
config = function()
|
||||
require "configs.toggleterm"
|
||||
end,
|
||||
},
|
||||
|
||||
-- Commenting
|
||||
["numToStr/Comment.nvim"] = {
|
||||
module = { "Comment", "Comment.api" },
|
||||
keys = { "gc", "gb", "g<", "g>" },
|
||||
config = function()
|
||||
require "configs.Comment"
|
||||
end,
|
||||
},
|
||||
|
||||
-- Indentation
|
||||
["lukas-reineke/indent-blankline.nvim"] = {
|
||||
event = "BufRead",
|
||||
config = function()
|
||||
require "configs.indent-line"
|
||||
end,
|
||||
},
|
||||
|
||||
-- Keymaps popup
|
||||
["folke/which-key.nvim"] = {
|
||||
module = "which-key",
|
||||
config = function()
|
||||
require "configs.which-key"
|
||||
end,
|
||||
},
|
||||
|
||||
-- Smooth scrolling
|
||||
["declancm/cinnamon.nvim"] = {
|
||||
event = { "BufRead", "BufNewFile" },
|
||||
config = function()
|
||||
require "configs.cinnamon"
|
||||
end,
|
||||
},
|
||||
|
||||
-- Smooth escaping
|
||||
["max397574/better-escape.nvim"] = {
|
||||
event = "InsertCharPre",
|
||||
config = function()
|
||||
require "configs.better_escape"
|
||||
end,
|
||||
},
|
||||
|
||||
-- Get extra JSON schemas
|
||||
["b0o/SchemaStore.nvim"] = { module = "schemastore" },
|
||||
|
||||
-- Session manager
|
||||
["Shatur/neovim-session-manager"] = {
|
||||
module = "session_manager",
|
||||
cmd = "SessionManager",
|
||||
event = "BufWritePost",
|
||||
config = function()
|
||||
require "configs.session_manager"
|
||||
end,
|
||||
},
|
||||
}
|
||||
|
||||
if astronvim.updater.snapshot then
|
||||
for plugin, options in pairs(astro_plugins) do
|
||||
local pin = astronvim.updater.snapshot[plugin:match "/([^/]*)$"]
|
||||
options.commit = pin and pin.commit or options.commit
|
||||
end
|
||||
end
|
||||
|
||||
local user_plugin_opts = astronvim.user_plugin_opts
|
||||
local packer = astronvim.initialize_packer()
|
||||
packer.startup {
|
||||
function(use)
|
||||
for key, plugin in pairs(user_plugin_opts("plugins.init", astro_plugins)) do
|
||||
if type(key) == "string" and not plugin[1] then
|
||||
plugin[1] = key
|
||||
end
|
||||
use(plugin)
|
||||
end
|
||||
end,
|
||||
config = user_plugin_opts("plugins.packer", {
|
||||
compile_path = astronvim.default_compile_path,
|
||||
display = {
|
||||
open_fn = function()
|
||||
return require("packer.util").float { border = "rounded" }
|
||||
end,
|
||||
},
|
||||
profile = {
|
||||
enable = true,
|
||||
threshold = 0.0001,
|
||||
},
|
||||
git = {
|
||||
clone_timeout = 300,
|
||||
subcommands = {
|
||||
update = "pull --rebase",
|
||||
},
|
||||
},
|
||||
auto_clean = true,
|
||||
compile_on_sync = true,
|
||||
}),
|
||||
}
|
||||
|
||||
astronvim.compiled()
|
||||
@@ -0,0 +1,122 @@
|
||||
local M = { hl = {}, provider = {}, conditional = {} }
|
||||
local C = require "default_theme.colors"
|
||||
|
||||
local function hl_by_name(name)
|
||||
return string.format("#%06x", vim.api.nvim_get_hl_by_name(name.group, true)[name.prop])
|
||||
end
|
||||
|
||||
local function hl_prop(group, prop)
|
||||
local status_ok, color = pcall(hl_by_name, { group = group, prop = prop })
|
||||
return status_ok and color or nil
|
||||
end
|
||||
|
||||
M.modes = {
|
||||
["n"] = { "NORMAL", "Normal", C.blue },
|
||||
["no"] = { "N-PENDING", "Normal", C.blue },
|
||||
["i"] = { "INSERT", "Insert", C.green },
|
||||
["ic"] = { "INSERT", "Insert", C.green },
|
||||
["t"] = { "TERMINAL", "Insert", C.green },
|
||||
["v"] = { "VISUAL", "Visual", C.purple },
|
||||
["V"] = { "V-LINE", "Visual", C.purple },
|
||||
[""] = { "V-BLOCK", "Visual", C.purple },
|
||||
["R"] = { "REPLACE", "Replace", C.red_1 },
|
||||
["Rv"] = { "V-REPLACE", "Replace", C.red_1 },
|
||||
["s"] = { "SELECT", "Visual", C.orange_1 },
|
||||
["S"] = { "S-LINE", "Visual", C.orange_1 },
|
||||
[""] = { "S-BLOCK", "Visual", C.orange_1 },
|
||||
["c"] = { "COMMAND", "Command", C.yellow_1 },
|
||||
["cv"] = { "COMMAND", "Command", C.yellow_1 },
|
||||
["ce"] = { "COMMAND", "Command", C.yellow_1 },
|
||||
["r"] = { "PROMPT", "Inactive", C.grey_7 },
|
||||
["rm"] = { "MORE", "Inactive", C.grey_7 },
|
||||
["r?"] = { "CONFIRM", "Inactive", C.grey_7 },
|
||||
["!"] = { "SHELL", "Inactive", C.grey_7 },
|
||||
}
|
||||
|
||||
function M.hl.group(hlgroup, base)
|
||||
return vim.tbl_deep_extend(
|
||||
"force",
|
||||
base or {},
|
||||
{ fg = hl_prop(hlgroup, "foreground"), bg = hl_prop(hlgroup, "background") }
|
||||
)
|
||||
end
|
||||
|
||||
function M.hl.fg(hlgroup, base)
|
||||
return vim.tbl_deep_extend("force", base or {}, { fg = hl_prop(hlgroup, "foreground") })
|
||||
end
|
||||
|
||||
function M.hl.mode(base)
|
||||
local lualine_avail, lualine = pcall(require, "lualine.themes." .. (vim.g.colors_name or "default_theme"))
|
||||
return function()
|
||||
local lualine_opts = lualine_avail and lualine[M.modes[vim.fn.mode()][2]:lower()]
|
||||
return M.hl.group(
|
||||
"Feline" .. M.modes[vim.fn.mode()][2],
|
||||
vim.tbl_deep_extend(
|
||||
"force",
|
||||
lualine_opts and type(lualine_opts.a) == "table" and lualine_opts.a
|
||||
or { fg = C.bg_1, bg = M.modes[vim.fn.mode()][3] },
|
||||
base or {}
|
||||
)
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
function M.provider.lsp_progress()
|
||||
local Lsp = vim.lsp.util.get_progress_messages()[1]
|
||||
return Lsp
|
||||
and string.format(
|
||||
" %%<%s %s %s (%s%%%%) ",
|
||||
((Lsp.percentage or 0) >= 70 and { "", "", "" } or { "", "", "" })[math.floor(
|
||||
vim.loop.hrtime() / 12e7
|
||||
) % 3 + 1],
|
||||
Lsp.title or "",
|
||||
Lsp.message or "",
|
||||
Lsp.percentage or 0
|
||||
)
|
||||
or ""
|
||||
end
|
||||
|
||||
function M.provider.lsp_client_names(expand_null_ls)
|
||||
return function()
|
||||
local buf_client_names = {}
|
||||
for _, client in pairs(vim.lsp.buf_get_clients(0)) do
|
||||
if client.name == "null-ls" and expand_null_ls then
|
||||
vim.list_extend(buf_client_names, astronvim.null_ls_sources(vim.bo.filetype, "FORMATTING"))
|
||||
vim.list_extend(buf_client_names, astronvim.null_ls_sources(vim.bo.filetype, "DIAGNOSTICS"))
|
||||
else
|
||||
table.insert(buf_client_names, client.name)
|
||||
end
|
||||
end
|
||||
return table.concat(buf_client_names, ", ")
|
||||
end
|
||||
end
|
||||
|
||||
function M.provider.treesitter_status()
|
||||
local ts = vim.treesitter.highlighter.active[vim.api.nvim_get_current_buf()]
|
||||
return (ts and next(ts)) and " 綠TS" or ""
|
||||
end
|
||||
|
||||
function M.provider.spacer(n)
|
||||
return string.rep(" ", n or 1)
|
||||
end
|
||||
|
||||
function M.conditional.git_available()
|
||||
return vim.b.gitsigns_head ~= nil
|
||||
end
|
||||
|
||||
function M.conditional.git_changed()
|
||||
local git_status = vim.b.gitsigns_status_dict
|
||||
return git_status and (git_status.added or 0) + (git_status.removed or 0) + (git_status.changed or 0) > 0
|
||||
end
|
||||
|
||||
function M.conditional.has_filetype()
|
||||
return vim.fn.empty(vim.fn.expand "%:t") ~= 1 and vim.bo.filetype and vim.bo.filetype ~= ""
|
||||
end
|
||||
|
||||
function M.conditional.bar_width(n)
|
||||
return function()
|
||||
return (vim.opt.laststatus:get() == 3 and vim.opt.columns:get() or vim.fn.winwidth(0)) > (n or 80)
|
||||
end
|
||||
end
|
||||
|
||||
return M
|
||||
@@ -0,0 +1,143 @@
|
||||
local ui = {}
|
||||
|
||||
function ui.nui_input()
|
||||
-- Set up NUI for UI Input
|
||||
-- From: https://github.com/MunifTanjim/nui.nvim/wiki/vim.ui#vimuiinput
|
||||
local input_ui
|
||||
vim.ui.input = function(opts, on_confirm)
|
||||
local Input = require "nui.input"
|
||||
local event = require("nui.utils.autocmd").event
|
||||
if input_ui then
|
||||
-- ensure single ui.input operation
|
||||
vim.api.nvim_err_writeln "busy: another input is pending!"
|
||||
return
|
||||
end
|
||||
|
||||
local function on_done(value)
|
||||
if input_ui then
|
||||
-- if it's still mounted, unmount it
|
||||
input_ui:unmount()
|
||||
end
|
||||
-- pass the input value
|
||||
on_confirm(value)
|
||||
-- indicate the operation is done
|
||||
input_ui = nil
|
||||
end
|
||||
|
||||
local border_top_text = opts.prompt or "[Input]"
|
||||
local default_value = opts.default
|
||||
|
||||
input_ui = Input({
|
||||
relative = "cursor",
|
||||
position = {
|
||||
row = 1,
|
||||
col = 0,
|
||||
},
|
||||
size = {
|
||||
-- minimum width 20
|
||||
width = math.max(20, type(default_value) == "string" and #default_value or 0),
|
||||
},
|
||||
border = {
|
||||
style = "rounded",
|
||||
highlight = "Normal",
|
||||
text = {
|
||||
top = border_top_text,
|
||||
top_align = "left",
|
||||
},
|
||||
},
|
||||
win_options = {
|
||||
winhighlight = "Normal:Normal",
|
||||
},
|
||||
}, {
|
||||
default_value = default_value,
|
||||
on_close = function()
|
||||
on_done(nil)
|
||||
end,
|
||||
on_submit = function(value)
|
||||
on_done(value)
|
||||
end,
|
||||
})
|
||||
|
||||
input_ui:mount()
|
||||
|
||||
-- cancel operation if cursor leaves input
|
||||
input_ui:on(event.BufLeave, function()
|
||||
on_done(nil)
|
||||
end, { once = true })
|
||||
|
||||
-- cancel operation if <Esc> is pressed
|
||||
input_ui:map("n", "<Esc>", function()
|
||||
on_done(nil)
|
||||
end, { noremap = true, nowait = true })
|
||||
end
|
||||
end
|
||||
|
||||
function ui.telescope_select()
|
||||
-- Telescope UI selection
|
||||
-- From: https://github.com/stevearc/dressing.nvim/blob/master/lua/dressing/select/telescope.lua
|
||||
vim.ui.select = vim.schedule_wrap(function(items, opts, on_choice)
|
||||
local themes = require "telescope.themes"
|
||||
local actions = require "telescope.actions"
|
||||
local state = require "telescope.actions.state"
|
||||
local pickers = require "telescope.pickers"
|
||||
local finders = require "telescope.finders"
|
||||
local conf = require("telescope.config").values
|
||||
|
||||
if opts.format_item then
|
||||
local format_item = opts.format_item
|
||||
opts.format_item = function(item)
|
||||
return tostring(format_item(item))
|
||||
end
|
||||
else
|
||||
opts.format_item = tostring
|
||||
end
|
||||
|
||||
local entry_maker = function(item)
|
||||
local formatted = opts.format_item(item)
|
||||
return {
|
||||
display = formatted,
|
||||
ordinal = formatted,
|
||||
value = item,
|
||||
}
|
||||
end
|
||||
|
||||
local picker_opts = themes.get_dropdown()
|
||||
|
||||
pickers.new(picker_opts, {
|
||||
prompt_title = opts.prompt,
|
||||
previewer = false,
|
||||
finder = finders.new_table {
|
||||
results = items,
|
||||
entry_maker = entry_maker,
|
||||
},
|
||||
sorter = conf.generic_sorter(opts),
|
||||
attach_mappings = function(prompt_bufnr)
|
||||
actions.select_default:replace(function()
|
||||
local selection = state.get_selected_entry()
|
||||
actions.close(prompt_bufnr)
|
||||
if not selection then
|
||||
-- User did not select anything.
|
||||
on_choice(nil, nil)
|
||||
return
|
||||
end
|
||||
local idx = nil
|
||||
for i, item in ipairs(items) do
|
||||
if item == selection.value then
|
||||
idx = i
|
||||
break
|
||||
end
|
||||
end
|
||||
on_choice(selection.value, idx)
|
||||
end)
|
||||
|
||||
actions.close:enhance { post = function() end }
|
||||
|
||||
return true
|
||||
end,
|
||||
}):find()
|
||||
end)
|
||||
end
|
||||
|
||||
for ui_addition, enabled in pairs(astronvim.user_plugin_opts("ui", { nui_input = true, telescope_select = true })) do
|
||||
astronvim.conditional_func(ui[ui_addition], enabled)
|
||||
end
|
||||
@@ -0,0 +1,101 @@
|
||||
local git = { url = "https://github.com/" }
|
||||
|
||||
function git.cmd(args, ...)
|
||||
return astronvim.cmd("git -C " .. astronvim.install.home .. " " .. args, ...)
|
||||
end
|
||||
|
||||
function git.is_repo()
|
||||
return git.cmd("rev-parse --is-inside-work-tree", false)
|
||||
end
|
||||
|
||||
function git.fetch(remote, ...)
|
||||
return git.cmd("fetch " .. remote, ...)
|
||||
end
|
||||
|
||||
function git.pull(...)
|
||||
return git.cmd("pull --rebase", ...)
|
||||
end
|
||||
|
||||
function git.checkout(dest, ...)
|
||||
return git.cmd("checkout " .. dest, ...)
|
||||
end
|
||||
|
||||
function git.hard_reset(dest, ...)
|
||||
return git.cmd("reset --hard " .. dest, ...)
|
||||
end
|
||||
|
||||
function git.branch_contains(remote, branch, commit, ...)
|
||||
return git.cmd("merge-base --is-ancestor " .. commit .. " " .. remote .. "/" .. branch, ...) ~= nil
|
||||
end
|
||||
|
||||
function git.remote_add(remote, url, ...)
|
||||
return git.cmd("remote add " .. remote .. " " .. url, ...)
|
||||
end
|
||||
|
||||
function git.remote_update(remote, url, ...)
|
||||
return git.cmd("remote set-url " .. remote .. " " .. url, ...)
|
||||
end
|
||||
|
||||
function git.remote_url(remote, ...)
|
||||
return astronvim.trim_or_nil(git.cmd("remote get-url " .. remote, ...))
|
||||
end
|
||||
|
||||
function git.current_version(...)
|
||||
return astronvim.trim_or_nil(git.cmd("describe --tags", ...))
|
||||
end
|
||||
|
||||
function git.current_branch(...)
|
||||
return astronvim.trim_or_nil(git.cmd("rev-parse --abbrev-ref HEAD", ...))
|
||||
end
|
||||
|
||||
function git.local_head(...)
|
||||
return astronvim.trim_or_nil(git.cmd("rev-parse HEAD", ...))
|
||||
end
|
||||
|
||||
function git.remote_head(remote, branch, ...)
|
||||
return astronvim.trim_or_nil(git.cmd("rev-list -n 1 " .. remote .. "/" .. branch, ...))
|
||||
end
|
||||
|
||||
function git.tag_commit(tag, ...)
|
||||
return astronvim.trim_or_nil(git.cmd("rev-list -n 1 " .. tag, ...))
|
||||
end
|
||||
|
||||
function git.get_commit_range(start_hash, end_hash, ...)
|
||||
local log = git.cmd("log --no-merges --pretty='format:[%h] %s' " .. start_hash .. ".." .. end_hash, ...)
|
||||
return log and vim.fn.split(log, "\n") or {}
|
||||
end
|
||||
|
||||
function git.get_versions(search, ...)
|
||||
local tags = git.cmd("tag -l --sort=version:refname '" .. (search == "latest" and "v*" or search) .. "'", ...)
|
||||
return tags and vim.fn.split(tags, "\n") or {}
|
||||
end
|
||||
|
||||
function git.latest_version(versions, ...)
|
||||
versions = versions and versions or git.get_versions(...)
|
||||
return versions[#versions]
|
||||
end
|
||||
|
||||
function git.parse_remote_url(str)
|
||||
return vim.fn.match(str, astronvim.url_matcher) == -1
|
||||
and git.url .. str .. (vim.fn.match(str, "/") == -1 and "/AstroNvim.git" or ".git")
|
||||
or str
|
||||
end
|
||||
|
||||
function git.breaking_changes(commits)
|
||||
return vim.tbl_filter(function(v)
|
||||
return vim.fn.match(v, "\\[.*\\]\\s\\+\\w\\+\\((\\w\\+)\\)\\?!:") ~= -1
|
||||
end, commits)
|
||||
end
|
||||
|
||||
function git.pretty_changelog(commits)
|
||||
local changelog = {}
|
||||
for _, commit in ipairs(commits) do
|
||||
local hash, type, msg = commit:match "(%[.*%])(.*:)(.*)"
|
||||
if hash and type and msg then
|
||||
vim.list_extend(changelog, { { hash, "DiffText" }, { type, "Typedef" }, { msg }, { "\n" } })
|
||||
end
|
||||
end
|
||||
return changelog
|
||||
end
|
||||
|
||||
return git
|
||||
@@ -0,0 +1,299 @@
|
||||
_G.astronvim = {}
|
||||
local stdpath = vim.fn.stdpath
|
||||
local tbl_insert = table.insert
|
||||
local map = vim.keymap.set
|
||||
|
||||
astronvim.install = astronvim_installation or { home = stdpath "config" }
|
||||
|
||||
local astronvim_config = stdpath("config"):gsub("nvim$", "astronvim")
|
||||
vim.opt.rtp:append(astronvim_config)
|
||||
local supported_configs = { astronvim.install.home, astronvim_config }
|
||||
|
||||
local function load_module_file(module)
|
||||
local found_module = nil
|
||||
for _, config_path in ipairs(supported_configs) do
|
||||
local module_path = config_path .. "/lua/" .. module:gsub("%.", "/") .. ".lua"
|
||||
if vim.fn.filereadable(module_path) == 1 then
|
||||
found_module = module_path
|
||||
end
|
||||
end
|
||||
if found_module then
|
||||
local status_ok, loaded_module = pcall(require, module)
|
||||
if status_ok then
|
||||
found_module = loaded_module
|
||||
else
|
||||
astronvim.notify("Error loading " .. found_module, "error")
|
||||
end
|
||||
end
|
||||
return found_module
|
||||
end
|
||||
|
||||
astronvim.user_settings = load_module_file "user.init"
|
||||
astronvim.default_compile_path = stdpath "data" .. "/packer_compiled.lua"
|
||||
astronvim.user_terminals = {}
|
||||
astronvim.url_matcher =
|
||||
"\\v\\c%(%(h?ttps?|ftp|file|ssh|git)://|[a-z]+[@][a-z]+[.][a-z]+:)%([&:#*@~%_\\-=?!+;/0-9a-z]+%(%([.;/?]|[.][.]+)[&:#*@~%_\\-=?!+/0-9a-z]+|:\\d+|,%(%(%(h?ttps?|ftp|file|ssh|git)://|[a-z]+[@][a-z]+[.][a-z]+:)@![0-9a-z]+))*|\\([&:#*@~%_\\-=?!+;/.0-9a-z]*\\)|\\[[&:#*@~%_\\-=?!+;/.0-9a-z]*\\]|\\{%([&:#*@~%_\\-=?!+;/.0-9a-z]*|\\{[&:#*@~%_\\-=?!+;/.0-9a-z]*})\\})+"
|
||||
|
||||
local function func_or_extend(overrides, default, extend)
|
||||
if extend then
|
||||
if type(overrides) == "table" then
|
||||
default = vim.tbl_deep_extend("force", default, overrides)
|
||||
elseif type(overrides) == "function" then
|
||||
default = overrides(default)
|
||||
end
|
||||
elseif overrides ~= nil then
|
||||
default = overrides
|
||||
end
|
||||
return default
|
||||
end
|
||||
|
||||
function astronvim.conditional_func(func, condition, ...)
|
||||
if (condition == nil and true or condition) and type(func) == "function" then
|
||||
return func(...)
|
||||
end
|
||||
end
|
||||
|
||||
function astronvim.trim_or_nil(str)
|
||||
return type(str) == "string" and vim.trim(str) or nil
|
||||
end
|
||||
|
||||
function astronvim.notify(msg, type, opts)
|
||||
vim.notify(msg, type, vim.tbl_deep_extend("force", { title = "AstroNvim" }, opts or {}))
|
||||
end
|
||||
|
||||
function astronvim.echo(messages)
|
||||
messages = messages or { { "\n" } }
|
||||
if type(messages) == "table" then
|
||||
vim.api.nvim_echo(messages, false, {})
|
||||
end
|
||||
end
|
||||
|
||||
function astronvim.confirm_prompt(messages)
|
||||
if messages then
|
||||
astronvim.echo(messages)
|
||||
end
|
||||
local confirmed = string.lower(vim.fn.input "(y/n) ") == "y"
|
||||
astronvim.echo()
|
||||
astronvim.echo()
|
||||
return confirmed
|
||||
end
|
||||
|
||||
local function user_setting_table(module)
|
||||
local settings = astronvim.user_settings or {}
|
||||
for tbl in string.gmatch(module, "([^%.]+)") do
|
||||
settings = settings[tbl]
|
||||
if settings == nil then
|
||||
break
|
||||
end
|
||||
end
|
||||
return settings
|
||||
end
|
||||
|
||||
function astronvim.initialize_packer()
|
||||
local packer_avail, packer = pcall(require, "packer")
|
||||
if not packer_avail then
|
||||
local packer_path = stdpath "data" .. "/site/pack/packer/start/packer.nvim"
|
||||
vim.fn.delete(packer_path, "rf")
|
||||
vim.fn.system {
|
||||
"git",
|
||||
"clone",
|
||||
"--depth",
|
||||
"1",
|
||||
"https://github.com/wbthomason/packer.nvim",
|
||||
packer_path,
|
||||
}
|
||||
astronvim.echo { { "Initializing Packer...\n\n" } }
|
||||
vim.cmd "packadd packer.nvim"
|
||||
packer_avail, packer = pcall(require, "packer")
|
||||
if not packer_avail then
|
||||
vim.api.nvim_err_writeln("Failed to load packer at:" .. packer_path .. "\n\n" .. packer)
|
||||
end
|
||||
end
|
||||
return packer
|
||||
end
|
||||
|
||||
function astronvim.vim_opts(options)
|
||||
for scope, table in pairs(options) do
|
||||
for setting, value in pairs(table) do
|
||||
vim[scope][setting] = value
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function astronvim.user_plugin_opts(module, default, extend, prefix)
|
||||
if extend == nil then
|
||||
extend = true
|
||||
end
|
||||
default = default or {}
|
||||
local user_settings = load_module_file((prefix or "user") .. "." .. module)
|
||||
if user_settings == nil and prefix == nil then
|
||||
user_settings = user_setting_table(module)
|
||||
end
|
||||
if user_settings ~= nil then
|
||||
default = func_or_extend(user_settings, default, extend)
|
||||
end
|
||||
return default
|
||||
end
|
||||
|
||||
function astronvim.compiled()
|
||||
local run_me, _ = loadfile(
|
||||
astronvim.user_plugin_opts("plugins.packer", { compile_path = astronvim.default_compile_path }).compile_path
|
||||
)
|
||||
if run_me then
|
||||
run_me()
|
||||
else
|
||||
astronvim.echo { { "Please run " }, { ":PackerSync", "Title" } }
|
||||
end
|
||||
end
|
||||
|
||||
function astronvim.url_opener()
|
||||
if vim.fn.has "mac" == 1 then
|
||||
vim.fn.jobstart({ "open", vim.fn.expand "<cfile>" }, { detach = true })
|
||||
elseif vim.fn.has "unix" == 1 then
|
||||
vim.fn.jobstart({ "xdg-open", vim.fn.expand "<cfile>" }, { detach = true })
|
||||
else
|
||||
astronvim.notify("gx is not supported on this OS!", "error")
|
||||
end
|
||||
end
|
||||
|
||||
-- term_details can be either a string for just a command or
|
||||
-- a complete table to provide full access to configuration when calling Terminal:new()
|
||||
function astronvim.toggle_term_cmd(term_details)
|
||||
if type(term_details) == "string" then
|
||||
term_details = { cmd = term_details, hidden = true }
|
||||
end
|
||||
local term_key = term_details.cmd
|
||||
if vim.v.count > 0 and term_details.count == nil then
|
||||
term_details.count = vim.v.count
|
||||
term_key = term_key .. vim.v.count
|
||||
end
|
||||
if astronvim.user_terminals[term_key] == nil then
|
||||
astronvim.user_terminals[term_key] = require("toggleterm.terminal").Terminal:new(term_details)
|
||||
end
|
||||
astronvim.user_terminals[term_key]:toggle()
|
||||
end
|
||||
|
||||
function astronvim.add_cmp_source(source)
|
||||
local cmp_avail, cmp = pcall(require, "cmp")
|
||||
if cmp_avail then
|
||||
local config = cmp.get_config()
|
||||
tbl_insert(config.sources, source)
|
||||
cmp.setup(config)
|
||||
end
|
||||
end
|
||||
|
||||
function astronvim.get_user_cmp_source(source)
|
||||
source = type(source) == "string" and { name = source } or source
|
||||
local priority = astronvim.user_plugin_opts("cmp.source_priority", {
|
||||
nvim_lsp = 1000,
|
||||
luasnip = 750,
|
||||
buffer = 500,
|
||||
path = 250,
|
||||
})[source.name]
|
||||
if priority then
|
||||
source.priority = priority
|
||||
end
|
||||
return source
|
||||
end
|
||||
|
||||
function astronvim.add_user_cmp_source(source)
|
||||
astronvim.add_cmp_source(astronvim.get_user_cmp_source(source))
|
||||
end
|
||||
|
||||
function astronvim.null_ls_providers(filetype)
|
||||
local registered = {}
|
||||
local sources_avail, sources = pcall(require, "null-ls.sources")
|
||||
if sources_avail then
|
||||
for _, source in ipairs(sources.get_available(filetype)) do
|
||||
for method in pairs(source.methods) do
|
||||
registered[method] = registered[method] or {}
|
||||
tbl_insert(registered[method], source.name)
|
||||
end
|
||||
end
|
||||
end
|
||||
return registered
|
||||
end
|
||||
|
||||
function astronvim.null_ls_sources(filetype, source)
|
||||
local methods_avail, methods = pcall(require, "null-ls.methods")
|
||||
return methods_avail and astronvim.null_ls_providers(filetype)[methods.internal[source]] or {}
|
||||
end
|
||||
|
||||
function astronvim.alpha_button(sc, txt)
|
||||
local sc_ = sc:gsub("%s", ""):gsub("LDR", "<leader>")
|
||||
if vim.g.mapleader then
|
||||
sc = sc:gsub("LDR", vim.g.mapleader == " " and "SPC" or vim.g.mapleader)
|
||||
end
|
||||
return {
|
||||
type = "button",
|
||||
val = txt,
|
||||
on_press = function()
|
||||
local key = vim.api.nvim_replace_termcodes(sc_, true, false, true)
|
||||
vim.api.nvim_feedkeys(key, "normal", false)
|
||||
end,
|
||||
opts = {
|
||||
position = "center",
|
||||
text = txt,
|
||||
shortcut = sc,
|
||||
cursor = 5,
|
||||
width = 36,
|
||||
align_shortcut = "right",
|
||||
hl = "DashboardCenter",
|
||||
hl_shortcut = "DashboardShortcut",
|
||||
},
|
||||
}
|
||||
end
|
||||
|
||||
function astronvim.is_available(plugin)
|
||||
return packer_plugins ~= nil and packer_plugins[plugin] ~= nil
|
||||
end
|
||||
|
||||
function astronvim.set_mappings(map_table, base)
|
||||
for mode, maps in pairs(map_table) do
|
||||
for keymap, options in pairs(maps) do
|
||||
if options then
|
||||
local cmd = options
|
||||
if type(options) == "table" then
|
||||
cmd = options[1]
|
||||
options[1] = nil
|
||||
else
|
||||
options = {}
|
||||
end
|
||||
map(mode, keymap, cmd, vim.tbl_deep_extend("force", options, base or {}))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function astronvim.delete_url_match()
|
||||
for _, match in ipairs(vim.fn.getmatches()) do
|
||||
if match.group == "HighlightURL" then
|
||||
vim.fn.matchdelete(match.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function astronvim.set_url_match()
|
||||
astronvim.delete_url_match()
|
||||
if vim.g.highlighturl_enabled then
|
||||
vim.fn.matchadd("HighlightURL", astronvim.url_matcher, 15)
|
||||
end
|
||||
end
|
||||
|
||||
function astronvim.toggle_url_match()
|
||||
vim.g.highlighturl_enabled = not vim.g.highlighturl_enabled
|
||||
astronvim.set_url_match()
|
||||
end
|
||||
|
||||
function astronvim.cmd(cmd, show_error)
|
||||
local result = vim.fn.system(cmd)
|
||||
local success = vim.api.nvim_get_vvar "shell_error" == 0
|
||||
if not success and (show_error == nil and true or show_error) then
|
||||
vim.api.nvim_err_writeln("Error running command: " .. cmd .. "\nError message:\n" .. result)
|
||||
end
|
||||
return success and result or nil
|
||||
end
|
||||
|
||||
require "core.utils.updater"
|
||||
|
||||
return astronvim
|
||||
@@ -0,0 +1,160 @@
|
||||
local fn = vim.fn
|
||||
local git = require "core.utils.git"
|
||||
local options = astronvim.user_plugin_opts(
|
||||
"updater",
|
||||
{ remote = "origin", branch = "main", channel = "nightly", show_changelog = true }
|
||||
)
|
||||
|
||||
if astronvim.install.is_stable ~= nil then
|
||||
options.channel = astronvim.install.is_stable and "stable" or "nightly"
|
||||
end
|
||||
|
||||
astronvim.updater = { options = options }
|
||||
if options.pin_plugins == nil and options.channel == "stable" or options.pin_plugins then
|
||||
local loaded, snapshot = pcall(fn.readfile, astronvim.install.home .. "/packer_snapshot")
|
||||
if loaded then
|
||||
loaded, snapshot = pcall(fn.json_decode, snapshot)
|
||||
astronvim.updater.snapshot = type(snapshot) == "table" and snapshot or nil
|
||||
end
|
||||
if not loaded then
|
||||
vim.api.nvim_err_writeln "Error loading packer snapshot"
|
||||
end
|
||||
end
|
||||
|
||||
function astronvim.updater.version()
|
||||
local version = astronvim.install.version or git.current_version(false)
|
||||
if version then
|
||||
astronvim.notify("Version: " .. version)
|
||||
end
|
||||
end
|
||||
|
||||
local function attempt_update(target)
|
||||
if options.channel == "stable" or options.commit then
|
||||
return git.checkout(target, false)
|
||||
else
|
||||
return git.pull(false)
|
||||
end
|
||||
end
|
||||
|
||||
local cancelled_message = { { "Update cancelled", "WarningMsg" } }
|
||||
|
||||
function astronvim.updater.update()
|
||||
if not git.is_repo() then
|
||||
astronvim.notify("Updater not available for non-git installations", "error")
|
||||
return
|
||||
end
|
||||
for remote, entry in pairs(options.remotes and options.remotes or {}) do
|
||||
local url = git.parse_remote_url(entry)
|
||||
local current_url = git.remote_url(remote, false)
|
||||
local check_needed = false
|
||||
if not current_url then
|
||||
git.remote_add(remote, url)
|
||||
check_needed = true
|
||||
elseif
|
||||
current_url ~= url
|
||||
and astronvim.confirm_prompt {
|
||||
{ "Remote " },
|
||||
{ remote, "Title" },
|
||||
{ " is currently set to " },
|
||||
{ current_url, "WarningMsg" },
|
||||
{ "\nWould you like us to set it to " },
|
||||
{ url, "String" },
|
||||
{ "?" },
|
||||
}
|
||||
then
|
||||
git.remote_update(remote, url)
|
||||
check_needed = true
|
||||
end
|
||||
if check_needed and git.remote_url(remote, false) ~= url then
|
||||
vim.api.nvim_err_writeln("Error setting up remote " .. remote .. " to " .. url)
|
||||
return
|
||||
end
|
||||
end
|
||||
local is_stable = options.channel == "stable"
|
||||
options.branch = is_stable and "main" or options.branch
|
||||
if not git.fetch(options.remote) then
|
||||
vim.api.nvim_err_writeln("Error fetching remote: " .. options.remote)
|
||||
return
|
||||
end
|
||||
local local_branch = (options.remote == "origin" and "" or (options.remote .. "_")) .. options.branch
|
||||
if git.current_branch() ~= local_branch then
|
||||
astronvim.echo {
|
||||
{ "Switching to branch: " },
|
||||
{ options.remote .. "/" .. options.branch .. "\n\n", "String" },
|
||||
}
|
||||
if not git.checkout(local_branch, false) then
|
||||
git.checkout("-b " .. local_branch .. " " .. options.remote .. "/" .. options.branch, false)
|
||||
end
|
||||
end
|
||||
if git.current_branch() ~= local_branch then
|
||||
vim.api.nvim_err_writeln("Error checking out branch: " .. options.remote .. "/" .. options.branch)
|
||||
return
|
||||
end
|
||||
local source = git.local_head() -- calculate current commit
|
||||
local target -- calculate target commit
|
||||
if is_stable then -- if stable get tag commit
|
||||
options.version = git.latest_version(git.get_versions(options.version or "latest"))
|
||||
target = git.tag_commit(options.version)
|
||||
elseif options.commit then -- if commit specified use it
|
||||
target = git.branch_contains(options.remote, options.branch, options.commit) and options.commit or nil
|
||||
else -- get most recent commit
|
||||
target = git.remote_head(options.remote, options.branch)
|
||||
end
|
||||
if not source or not target then -- continue if current and target commits were found
|
||||
vim.api.nvim_err_writeln "Error checking for updates"
|
||||
return
|
||||
elseif source == target then
|
||||
astronvim.echo { { "No updates available", "String" } }
|
||||
return
|
||||
elseif -- prompt user if they want to accept update
|
||||
not options.skip_prompts
|
||||
and not astronvim.confirm_prompt {
|
||||
{ "Update available to ", "Title" },
|
||||
{ is_stable and options.version or target, "String" },
|
||||
{ "\nContinue?" },
|
||||
}
|
||||
then
|
||||
astronvim.echo(cancelled_message)
|
||||
return
|
||||
else -- perform update
|
||||
local changelog = git.get_commit_range(source, target)
|
||||
local breaking = git.breaking_changes(changelog)
|
||||
local breaking_prompt = { { "Update contains the following breaking changes:\n", "WarningMsg" } }
|
||||
vim.list_extend(breaking_prompt, git.pretty_changelog(breaking))
|
||||
vim.list_extend(breaking_prompt, { { "\nWould you like to continue?" } })
|
||||
if #breaking > 0 and not options.skip_prompts and not astronvim.confirm_prompt(breaking_prompt) then
|
||||
astronvim.echo(cancelled_message)
|
||||
return
|
||||
end
|
||||
local updated = attempt_update(target)
|
||||
if
|
||||
not updated
|
||||
and not options.skip_prompts
|
||||
and not astronvim.confirm_prompt {
|
||||
{ "Unable to pull due to local modifications to base files.\n", "ErrorMsg" },
|
||||
{ "Reset local files and continue?" },
|
||||
}
|
||||
then
|
||||
astronvim.echo(cancelled_message)
|
||||
return
|
||||
elseif not updated then
|
||||
git.hard_reset(source)
|
||||
updated = attempt_update(target)
|
||||
end
|
||||
if not updated then
|
||||
vim.api.nvim_err_writeln "Error ocurred performing update"
|
||||
return
|
||||
end
|
||||
local summary = {
|
||||
{ "AstroNvim updated successfully to ", "Title" },
|
||||
{ git.current_version(), "String" },
|
||||
{ "!\n", "Title" },
|
||||
{ "Please restart and run :PackerSync.\n\n", "WarningMsg" },
|
||||
}
|
||||
if options.show_changelog and #changelog > 0 then
|
||||
vim.list_extend(summary, { { "Changelog:\n", "Title" } })
|
||||
vim.list_extend(summary, git.pretty_changelog(changelog))
|
||||
end
|
||||
astronvim.echo(summary)
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,89 @@
|
||||
local base = {
|
||||
Normal = { fg = C.fg, bg = C.bg },
|
||||
Comment = { fg = C.grey_2, bg = C.none },
|
||||
Constant = { fg = C.yellow, bg = C.none },
|
||||
String = { fg = C.green, bg = C.none },
|
||||
Character = { fg = C.green, bg = C.none },
|
||||
Number = { fg = C.orange, bg = C.none },
|
||||
Boolean = { fg = C.blue, bg = C.none },
|
||||
Float = { fg = C.yellow, bg = C.none },
|
||||
Identifier = { fg = C.blue, bg = C.none },
|
||||
Function = { fg = C.yellow, bg = C.none },
|
||||
Statement = { fg = C.purple, bg = C.none },
|
||||
Conditional = { fg = C.purple_1, bg = C.none },
|
||||
Repeat = { fg = C.purple, bg = C.none },
|
||||
Label = { fg = C.blue, bg = C.none },
|
||||
Operator = { fg = C.purple, bg = C.none },
|
||||
Keyword = { fg = C.purple, bg = C.none },
|
||||
Exception = { fg = C.purple, bg = C.none },
|
||||
Preproc = { fg = C.yellow, bg = C.none },
|
||||
Include = { fg = C.purple, bg = C.none },
|
||||
Define = { fg = C.purple, bg = C.none },
|
||||
Title = { fg = C.cyan, bg = C.none },
|
||||
Macro = { fg = C.purple, bg = C.none },
|
||||
PreCondit = { fg = C.blue, bg = C.none },
|
||||
Type = { fg = C.blue, bg = C.none },
|
||||
StorageClass = { fg = C.blue, bg = C.none },
|
||||
Structure = { fg = C.yellow, bg = C.none },
|
||||
Typedef = { fg = C.yellow, bg = C.none },
|
||||
Special = { fg = C.blue, bg = C.none },
|
||||
SpecialComment = { fg = C.grey, bg = C.none },
|
||||
Error = { fg = C.red, bg = C.none },
|
||||
Todo = { fg = C.purple, bg = C.none },
|
||||
Underlined = { fg = C.cyan, bg = C.none },
|
||||
Cursor = { fg = C.none, bg = C.none },
|
||||
ColorColumn = { fg = C.none, bg = C.grey_4 },
|
||||
CursorLineNr = { fg = C.fg, bg = C.none },
|
||||
Conceal = { fg = C.grey, bg = C.none },
|
||||
CursorColumn = { fg = C.none, bg = C.grey_4 },
|
||||
CursorLine = { fg = C.none, bg = C.grey_8 },
|
||||
Directory = { fg = C.blue, bg = C.none },
|
||||
DiffAdd = { fg = C.grey_3, bg = C.green },
|
||||
DiffChange = { fg = C.yellow, bg = C.none },
|
||||
DiffDelete = { fg = C.grey_3, bg = C.red },
|
||||
DiffText = { fg = C.grey_3, bg = C.yellow },
|
||||
ErrorMsg = { fg = C.red, bg = C.none },
|
||||
VertSplit = { fg = C.black, bg = C.none },
|
||||
Folded = { fg = C.grey, bg = C.none },
|
||||
FoldColumn = { fg = C.none, bg = C.none },
|
||||
IncSearch = { fg = C.yellow, bg = C.grey },
|
||||
LineNr = { fg = C.grey_1, bg = C.none },
|
||||
NonText = { fg = C.grey_1, bg = C.none },
|
||||
Pmenu = { fg = C.fg, bg = C.black_1 },
|
||||
PmenuSel = { fg = C.none, bg = C.grey_4 },
|
||||
PmenuSbar = { fg = C.none, bg = C.grey_3 },
|
||||
PmenuThumb = { fg = C.none, bg = C.fg },
|
||||
Question = { fg = C.purple, bg = C.none },
|
||||
QuickFixLine = { fg = C.grey_3, bg = C.yellow },
|
||||
Search = { fg = C.grey_3, bg = C.yellow },
|
||||
SignColumn = { fg = C.none, bg = C.none },
|
||||
SpecialKey = { fg = C.grey_1, bg = C.none },
|
||||
SpellBad = { fg = C.red, bg = C.none },
|
||||
SpellCap = { fg = C.yellow, bg = C.none },
|
||||
SpellLocal = { fg = C.yellow, bg = C.none },
|
||||
SpellRare = { fg = C.yellow, bg = C.none },
|
||||
StatusLine = { fg = C.fg, bg = C.grey_4 },
|
||||
StatusLineNC = { fg = C.grey, bg = C.none },
|
||||
StatusLineTerm = { fg = C.fg, bg = C.grey_4 },
|
||||
StatusLineTermNC = { fg = C.grey_4, bg = C.none },
|
||||
TabLine = { fg = C.grey, bg = C.none },
|
||||
TabLineSel = { fg = C.fg, bg = C.none },
|
||||
TabLineFill = { fg = C.none, bg = C.grey_3 },
|
||||
Terminal = { fg = C.fg, bg = C.grey_3 },
|
||||
Visual = { fg = C.none, bg = C.grey_5 },
|
||||
VisualNOS = { fg = C.grey_5, bg = C.none },
|
||||
WarningMsg = { fg = C.yellow, bg = C.none },
|
||||
WildMenu = { fg = C.grey_3, bg = C.blue },
|
||||
EndOfBuffer = { fg = C.bg, bg = C.none },
|
||||
CmpItemAbbrDefault = { fg = C.fg },
|
||||
CmpItemAbbrDeprecatedDefault = { fg = C.grey_2 },
|
||||
CmpItemAbbrMatchDefault = { fg = C.white },
|
||||
CmpItemAbbrMatchFuzzyDefault = { fg = C.white },
|
||||
CmpItemKind = { fg = C.yellow },
|
||||
CmpItemAbbr = { fg = C.fg },
|
||||
CmpItemMenuDefault = { fg = C.fg },
|
||||
FloatBorder = { bg = C.none },
|
||||
MatchParen = { fg = C.none, bg = C.grey_5 },
|
||||
}
|
||||
|
||||
return base
|
||||
@@ -0,0 +1,76 @@
|
||||
local colors = {
|
||||
none = "NONE",
|
||||
fg = "#abb2bf",
|
||||
bg = "",
|
||||
bg_1 = "#303742",
|
||||
black = "#181a1f",
|
||||
black_1 = "#1f1f25",
|
||||
green = "#98c379",
|
||||
green_1 = "#89b06d",
|
||||
green_2 = "#95be76",
|
||||
white = "#dedede",
|
||||
white_1 = "#afb2bb",
|
||||
white_2 = "#c9c9c9",
|
||||
blue = "#61afef",
|
||||
blue_1 = "#40d9ff",
|
||||
blue_2 = "#1b1f27",
|
||||
blue_3 = "#8094B4",
|
||||
orange = "#d19a66",
|
||||
orange_1 = "#ff9640",
|
||||
orange_2 = "#ff8800",
|
||||
yellow = "#e5c07b",
|
||||
yellow_1 = "#ebae34",
|
||||
yellow_2 = "#d1b071",
|
||||
red = "#e06c75",
|
||||
red_1 = "#ec5f67",
|
||||
red_2 = "#ffbba6",
|
||||
red_3 = "#cc626a",
|
||||
red_4 = "#d47d85",
|
||||
grey = "#5c6370",
|
||||
grey_1 = "#4b5263",
|
||||
grey_2 = "#777d86",
|
||||
grey_3 = "#282c34",
|
||||
grey_4 = "#2c323c",
|
||||
grey_5 = "#3e4452",
|
||||
grey_6 = "#3b4048",
|
||||
grey_7 = "#5c5c5c",
|
||||
grey_8 = "#252931",
|
||||
grey_9 = "#787e87",
|
||||
grey_10 = "#D3D3D3",
|
||||
gold = "#ffcc00",
|
||||
cyan = "#56b6c2",
|
||||
purple = "#c678dd",
|
||||
purple_1 = "#a9a1e1",
|
||||
|
||||
-- icon colors
|
||||
c = "#519aba",
|
||||
css = "#61afef",
|
||||
deb = "#a1b7ee",
|
||||
docker = "#384d54",
|
||||
html = "#de8c92",
|
||||
jpeg = "#c882e7",
|
||||
jpg = "#c882e7",
|
||||
js = "#ebcb8b",
|
||||
jsx = "#519ab8",
|
||||
kt = "#7bc99c",
|
||||
lock = "#c4c720",
|
||||
lua = "#51a0cf",
|
||||
mp3 = "#d39ede",
|
||||
mp4 = "#9ea3de",
|
||||
out = "#abb2bf",
|
||||
png = "#c882e7",
|
||||
py = "#a3b8ef",
|
||||
rb = "#ff75a0",
|
||||
robots = "#abb2bf",
|
||||
rpm = "#fca2aa",
|
||||
rs = "#dea584",
|
||||
toml = "#39bf39",
|
||||
ts = "#519aba",
|
||||
ttf = "#abb2bf",
|
||||
vue = "#7bc99c",
|
||||
woff = "#abb2bf",
|
||||
woff2 = "#abb2bf",
|
||||
zip = "#f9d71c",
|
||||
}
|
||||
|
||||
return astronvim.user_plugin_opts("default_theme.colors", colors)
|
||||
@@ -0,0 +1,49 @@
|
||||
vim.cmd "highlight clear"
|
||||
if vim.fn.exists "syntax_on" then
|
||||
vim.cmd "syntax reset"
|
||||
end
|
||||
vim.o.background = "dark"
|
||||
vim.o.termguicolors = true
|
||||
vim.g.colors_name = "default_theme"
|
||||
|
||||
local user_plugin_opts = astronvim.user_plugin_opts
|
||||
local utils = require "default_theme.utils"
|
||||
|
||||
C = require "default_theme.colors"
|
||||
|
||||
local highlights = {}
|
||||
|
||||
for _, module in ipairs { "base", "treesitter", "lsp" } do
|
||||
highlights = vim.tbl_deep_extend("force", highlights, require("default_theme." .. module))
|
||||
end
|
||||
|
||||
for plugin, enabled in
|
||||
pairs(user_plugin_opts("default_theme.plugins", {
|
||||
aerial = true,
|
||||
beacon = false,
|
||||
bufferline = true,
|
||||
dashboard = true,
|
||||
gitsigns = true,
|
||||
highlighturl = true,
|
||||
hop = false,
|
||||
indent_blankline = true,
|
||||
lightspeed = false,
|
||||
["neo-tree"] = true,
|
||||
notify = true,
|
||||
["nvim-tree"] = false,
|
||||
["nvim-web-devicons"] = true,
|
||||
rainbow = true,
|
||||
symbols_outline = false,
|
||||
telescope = true,
|
||||
vimwiki = false,
|
||||
["which-key"] = true,
|
||||
}))
|
||||
do
|
||||
if enabled then
|
||||
highlights = vim.tbl_deep_extend("force", highlights, require("default_theme.plugins." .. plugin))
|
||||
end
|
||||
end
|
||||
|
||||
for group, spec in pairs(user_plugin_opts("default_theme.highlights", highlights)) do
|
||||
vim.api.nvim_set_hl(0, group, utils.parse_style(spec))
|
||||
end
|
||||
@@ -0,0 +1,26 @@
|
||||
local utils = require "default_theme.utils"
|
||||
|
||||
local lsp = {
|
||||
DiagnosticError = utils.parse_diagnostic_style { fg = C.red_1 },
|
||||
DiagnosticHint = utils.parse_diagnostic_style { fg = C.yellow_1 },
|
||||
DiagnosticInfo = utils.parse_diagnostic_style { fg = C.white_2 },
|
||||
DiagnosticWarn = utils.parse_diagnostic_style { fg = C.orange_1 },
|
||||
DiagnosticInformation = { fg = C.yellow, bold = true },
|
||||
DiagnosticTruncateLine = { fg = C.white_1, bold = true },
|
||||
DiagnosticUnderlineError = { sp = C.red_2, undercurl = true },
|
||||
DiagnosticUnderlineHint = { sp = C.red_2, undercurl = true },
|
||||
DiagnosticUnderlineInfo = { sp = C.red_2, undercurl = true },
|
||||
DiagnosticUnderlineWarn = { sp = C.red_2, undercurl = true },
|
||||
LspDiagnosticsFloatingError = { fg = C.red_1 },
|
||||
LspDiagnosticsFloatingHint = { fg = C.yellow_1 },
|
||||
LspDiagnosticsFloatingInfor = { fg = C.white_2 },
|
||||
LspDiagnosticsFloatingWarn = { fg = C.orange_1 },
|
||||
LspFloatWinBorder = { fg = C.white_1 },
|
||||
LspFloatWinNormal = { fg = C.fg, bg = C.black_1 },
|
||||
LspReferenceRead = { fg = C.none, bg = C.grey_5 },
|
||||
LspReferenceText = { fg = C.none, bg = C.grey_5 },
|
||||
LspReferenceWrite = { fg = C.none, bg = C.grey_5 },
|
||||
ProviderTruncateLine = { fg = C.white_1 },
|
||||
}
|
||||
|
||||
return lsp
|
||||
@@ -0,0 +1,30 @@
|
||||
return {
|
||||
AerialLine = { fg = C.yellow, bg = C.none },
|
||||
AerialGuide = { fg = C.grey_2 },
|
||||
AerialBooleanIcon = { link = "TSBoolean" },
|
||||
AerialClassIcon = { link = "TSType" },
|
||||
AerialConstantIcon = { link = "TSConstant" },
|
||||
AerialConstructorIcon = { link = "TSConstructor" },
|
||||
AerialFieldIcon = { link = "TSField" },
|
||||
AerialFunctionIcon = { link = "TSFunction" },
|
||||
AerialMethodIcon = { link = "TSMethod" },
|
||||
AerialNamespaceIcon = { link = "TSNamespace" },
|
||||
AerialNumberIcon = { link = "TSNumber" },
|
||||
AerialOperatorIcon = { link = "TSOperator" },
|
||||
AerialTypeParameterIcon = { link = "TSParameter" },
|
||||
AerialPropertyIcon = { link = "TSProperty" },
|
||||
AerialStringIcon = { link = "TSString" },
|
||||
AerialVariableIcon = { link = "TSConstant" },
|
||||
AerialEnumMemberIcon = { link = "TSField" },
|
||||
AerialEnumIcon = { link = "TSType" },
|
||||
AerialFileIcon = { link = "TSURI" },
|
||||
AerialModuleIcon = { link = "TSNamespace" },
|
||||
AerialPackageIcon = { link = "TSNamespace" },
|
||||
AerialInterfaceIcon = { link = "TSType" },
|
||||
AerialStructIcon = { link = "TSType" },
|
||||
AerialEventIcon = { link = "TSType" },
|
||||
AerialArrayIcon = { link = "TSConstant" },
|
||||
AerialObjectIcon = { link = "TSType" },
|
||||
AerialKeyIcon = { link = "TSType" },
|
||||
AerialNullIcon = { link = "TSType" },
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
return { Beacon = { bg = C.blue } }
|
||||
@@ -0,0 +1,21 @@
|
||||
return {
|
||||
BufferLineFill = { fg = C.grey_9, bg = C.grey_4 },
|
||||
BufferLineBackground = { fg = C.grey_9, bg = C.grey_4 },
|
||||
BufferLineBufferVisible = { fg = C.fg, bg = C.bg },
|
||||
BufferLineBufferSelected = { fg = C.white, bg = C.bg, bold = true },
|
||||
BufferLineTab = { fg = C.grey_9, bg = C.bg },
|
||||
BufferLineTabSelected = { fg = C.fg, bg = C.bg },
|
||||
BufferLineTabClose = { fg = C.red_4, bg = C.bg },
|
||||
BufferLineIndicatorSelected = { fg = C.bg, bg = C.bg },
|
||||
BufferLineSeparator = { fg = C.grey_4, bg = C.grey_4 },
|
||||
BufferLineSeparatorVisible = { fg = C.bg, bg = C.bg },
|
||||
BufferLineSeparatorSelected = { fg = C.grey_4, bg = C.grey_4 },
|
||||
BufferLineCloseButton = { fg = C.grey_9, bg = C.grey_4 },
|
||||
BufferLineCloseButtonVisible = { fg = C.grey_10, bg = C.bg },
|
||||
BufferLineCloseButtonSelected = { fg = C.red_4, bg = C.bg },
|
||||
BufferLineModified = { fg = C.red_4, bg = C.grey_4 },
|
||||
BufferLineModifiedVisible = { fg = C.fg, bg = C.bg },
|
||||
BufferLineModifiedSelected = { fg = C.green_2, bg = C.bg },
|
||||
BufferLineError = { fg = C.red_1, bg = C.red_1 },
|
||||
BufferLineErrorDiagnostic = { fg = C.red_1, bg = C.red_1 },
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
return {
|
||||
DashboardHeader = { fg = C.cyan },
|
||||
DashboardShortcut = { fg = C.yellow },
|
||||
DashboardFooter = { fg = C.cyan },
|
||||
DashboardCenter = { fg = C.blue },
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
return {
|
||||
GitSignsAdd = { fg = C.green, bg = C.none },
|
||||
GitSignsChange = { fg = C.orange_1, bg = C.none },
|
||||
GitSignsDelete = { fg = C.red_1, bg = C.none },
|
||||
MoreMsg = { fg = C.green, bold = true },
|
||||
ModeMsg = { fg = C.grey, bold = true },
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
return { HighlightURL = { underline = true } }
|
||||
@@ -0,0 +1,6 @@
|
||||
return {
|
||||
HopNextKey = { fg = C.red, bold = true },
|
||||
HopNextKey1 = { fg = C.cyan, bold = true },
|
||||
HopNextKey2 = { fg = C.blue },
|
||||
HopUnmatched = { fg = C.grey },
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
return {
|
||||
IndentBlanklineSpaceChar = { fg = C.grey_6, nocombine = true },
|
||||
IndentBlanklineChar = { fg = C.grey_6, nocombine = true },
|
||||
IndentBlanklineContextStart = { fg = C.grey_7, underline = true },
|
||||
IndentBlanklineContextChar = { fg = C.grey_7, nocombine = true },
|
||||
IndentBlanklineSpaceCharBlankline = { fg = C.grey_6, nocombine = true },
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
return {
|
||||
LightspeedLabel = { fg = C.red_3, underline = true },
|
||||
LightspeedLabelOverlapped = { fg = C.blue, underline = true },
|
||||
LightspeedLabelDistant = { fg = C.red_1, underline = true },
|
||||
LightspeedLabelDistantOverlapped = { fg = C.blue_1, underline = true },
|
||||
LightspeedShortcut = { fg = C.black, bg = C.red_3, bold = true, underline = true },
|
||||
LightspeedShortcutOverlapped = { fg = C.black, bg = C.blue, bold = true, underline = true },
|
||||
LightspeedMaskedChar = { fg = C.green_1 },
|
||||
LightspeedGreyWash = { fg = C.grey_2, bg = C.none },
|
||||
LightspeedUnlabeledMatch = { fg = C.white, bold = true },
|
||||
LightspeedOneCharMatch = { fg = C.green, bg = C.red_3, bold = true },
|
||||
LightspeedUniqueChar = { fg = C.white, bold = true },
|
||||
LightspeedPendingOpArea = { fg = C.yellow },
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
return {
|
||||
NeoTreeDirectoryIcon = { fg = C.blue },
|
||||
NeoTreeRootName = { fg = C.fg, bold = true },
|
||||
NeoTreeFileName = { fg = C.fg },
|
||||
NeoTreeFileIcon = { fg = C.fg },
|
||||
NeoTreeFileNameOpened = { fg = C.green },
|
||||
NeoTreeIndentMarker = { fg = C.blue_3 },
|
||||
NeoTreeGitAdded = { fg = C.green },
|
||||
NeoTreeGitConflict = { fg = C.red },
|
||||
NeoTreeGitModified = { fg = C.orange },
|
||||
NeoTreeGitUntracked = { fg = C.yellow },
|
||||
NeoTreeNormal = { bg = C.blue_2 },
|
||||
NeoTreeNormalNC = { bg = C.blue_2 },
|
||||
NeoTreeSymbolicLinkTarget = { fg = C.cyan },
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
return {
|
||||
NotifyERRORBorder = { fg = C.red },
|
||||
NotifyWARNBorder = { fg = C.orange_1 },
|
||||
NotifyINFOBorder = { fg = C.green },
|
||||
NotifyDEBUGBorder = { fg = C.cyan },
|
||||
NotifyTRACERBorder = { fg = C.purple },
|
||||
NotifyERRORIcon = { fg = C.red },
|
||||
NotifyWARNIcon = { fg = C.orange_1 },
|
||||
NotifyINFOIcon = { fg = C.green },
|
||||
NotifyDEBUGIcon = { fg = C.cyan },
|
||||
NotifyTRACEIcon = { fg = C.purple },
|
||||
NotifyERRORTitle = { fg = C.red },
|
||||
NotifyWARNTitle = { fg = C.orange_1 },
|
||||
NotifyINFOTitle = { fg = C.green },
|
||||
NotifyDEBUGTitle = { fg = C.cyan },
|
||||
NotifyTRACETitle = { fg = C.purple },
|
||||
NotifyERRORBody = { fg = C.fg },
|
||||
NotifyWARNBody = { fg = C.fg },
|
||||
NotifyINFOBody = { fg = C.fg },
|
||||
NotifyDEBUGBody = { fg = C.fg },
|
||||
NotifyTRACEBody = { fg = C.fg },
|
||||
NotifyLogTime = { fg = C.grey_2 },
|
||||
NotifyLogTitle = { fg = C.blue },
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
return {
|
||||
NvimTreeFolderIcon = { fg = C.blue },
|
||||
NvimTreeExecFile = { fg = C.green },
|
||||
NvimTreeOpenedFile = { fg = C.green },
|
||||
NvimTreeRootFolder = { fg = C.bg },
|
||||
NvimTreeEndOfBuffer = { fg = C.bg },
|
||||
NvimTreeNormal = { bg = C.blue_2 },
|
||||
NvimTreeNormalNC = { bg = C.blue_2 },
|
||||
NvimTreeVertSplit = { fg = C.blue_2, bg = C.blue_2 },
|
||||
NvimTreeImageFile = { fg = C.purple },
|
||||
NvimTreeSymlink = { fg = C.cyan },
|
||||
NvimTreeSpecialFile = { fg = C.yellow },
|
||||
NvimTreeGitDeleted = { fg = C.red },
|
||||
NvimTreeGitMerge = { fg = C.orange },
|
||||
NvimTreeGitRenamed = { fg = C.purple },
|
||||
NvimTreeGitStaged = { fg = C.green },
|
||||
NvimTreeGitDirty = { fg = C.red },
|
||||
NvimTreeGitNew = { fg = C.yellow },
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
return {
|
||||
DevIconC = { fg = C.c },
|
||||
DevIconCss = { fg = C.css },
|
||||
DevIconDeb = { fg = C.deb },
|
||||
DevIconDockerfile = { fg = C.docker },
|
||||
DevIconHtml = { fg = C.html },
|
||||
DevIconJpeg = { fg = C.jpeg },
|
||||
DevIconJpg = { fg = C.jpg },
|
||||
DevIconJs = { fg = C.js },
|
||||
DevIconJsx = { fg = C.jsx },
|
||||
DevIconKotlin = { fg = C.kt },
|
||||
DevIconLock = { fg = C.lock },
|
||||
DevIconLua = { fg = C.lua },
|
||||
DevIconMp3 = { fg = C.mp3 },
|
||||
DevIconMp4 = { fg = C.mp4 },
|
||||
DevIconOut = { fg = C.out },
|
||||
DevIconPng = { fg = C.png },
|
||||
DevIconPy = { fg = C.py },
|
||||
DevIconRb = { fg = C.rb },
|
||||
DevIconRobots = { fg = C.robots },
|
||||
DevIconRpm = { fg = C.rpm },
|
||||
DevIconRs = { fg = C.rs },
|
||||
DevIconToml = { fg = C.toml },
|
||||
DevIconTrueTypeFont = { fg = C.ttf },
|
||||
DevIconTs = { fg = C.ts },
|
||||
DevIconVue = { fg = C.vue },
|
||||
DevIconWebOpenFontFormat = { fg = C.woff },
|
||||
DevIconWebOpenFontFormat2 = { fg = C.woff2 },
|
||||
DevIconXz = { fg = C.zip },
|
||||
DevIconZip = { fg = C.zip },
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
return {
|
||||
rainbowcol1 = { fg = "Gold" },
|
||||
rainbowcol2 = { fg = "Orchid" },
|
||||
rainbowcol3 = { fg = "LightSkyBlue" },
|
||||
rainbowcol4 = { fg = "Gold" },
|
||||
rainbowcol5 = { fg = "Orchid" },
|
||||
rainbowcol6 = { fg = "LightSkyBlue" },
|
||||
rainbowcol7 = { fg = "Orchid" },
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
return { FocusedSymbol = { fg = C.yellow, bg = C.none } }
|
||||
@@ -0,0 +1,57 @@
|
||||
return {
|
||||
TelescopeResultsTitle = { fg = C.green },
|
||||
TelescopePromptTitle = { fg = C.blue },
|
||||
TelescopePreviewTitle = { fg = C.purple },
|
||||
TelescopeResultsBorder = { fg = C.fg },
|
||||
TelescopePromptBorder = { fg = C.fg },
|
||||
TelescopePreviewBorder = { fg = C.fg },
|
||||
TelescopeSelectionCaret = { fg = C.red },
|
||||
TelescopeMatching = { fg = C.yellow },
|
||||
TelescopeSelection = { bg = C.grey_5 },
|
||||
TelescopeMultiSelection = { fg = C.blue },
|
||||
TelescopeMultiIcon = { fg = C.blue },
|
||||
TelescopeNormal = { fg = C.fg, bg = C.bg },
|
||||
TelescopePreviewNormal = { fg = C.fg, bg = C.bg },
|
||||
TelescopePromptNormal = { fg = C.fg, bg = C.bg },
|
||||
TelescopeResultsNormal = { fg = C.fg, bg = C.bg },
|
||||
TelescopeBorder = { fg = C.fg },
|
||||
TelescopeTitle = { fg = C.fg },
|
||||
TelescopePromptCounter = { fg = C.grey_1 },
|
||||
TelescopePromptPrefix = { fg = C.blue },
|
||||
TelescopePreviewLine = { bg = C.grey_5 },
|
||||
TelescopePreviewMatch = { fg = C.yellow },
|
||||
TelescopePreviewPipe = { fg = C.yellow },
|
||||
TelescopePreviewCharDev = { fg = C.yellow },
|
||||
TelescopePreviewDirectory = { fg = C.blue },
|
||||
TelescopePreviewBlock = { fg = C.yellow },
|
||||
TelescopePreviewLink = { fg = C.blue },
|
||||
TelescopePreviewSocket = { fg = C.purple },
|
||||
TelescopePreviewRead = { fg = C.yellow },
|
||||
TelescopePreviewWrite = { fg = C.purple },
|
||||
TelescopePreviewExecute = { fg = C.green },
|
||||
TelescopePreviewHyphen = { fg = C.grey_1 },
|
||||
TelescopePreviewSticky = { fg = C.blue },
|
||||
TelescopePreviewSize = { fg = C.green },
|
||||
TelescopePreviewUser = { fg = C.yellow },
|
||||
TelescopePreviewGroup = { fg = C.yellow },
|
||||
TelescopePreviewDate = { fg = C.blue },
|
||||
TelescopePreviewMessage = { fg = C.fg },
|
||||
TelescopePreviewMessageFillchar = { fg = C.fg },
|
||||
TelescopeResultsClass = { fg = C.yellow },
|
||||
TelescopeResultsConstant = { fg = C.yellow },
|
||||
TelescopeResultsField = { fg = C.red },
|
||||
TelescopeResultsFunction = { fg = C.blue },
|
||||
TelescopeResultsMethod = { fg = C.blue },
|
||||
TelescopeResultsOperator = { fg = C.cyan },
|
||||
TelescopeResultsStruct = { fg = C.purple },
|
||||
TelescopeResultsVariable = { fg = C.red },
|
||||
TelescopeResultsLineNr = { fg = C.grey_1 },
|
||||
TelescopeResultsIdentifier = { fg = C.blue },
|
||||
TelescopeResultsNumber = { fg = C.orange },
|
||||
TelescopeResultsComment = { fg = C.grey_2 },
|
||||
TelescopeResultsSpecialComment = { fg = C.grey },
|
||||
TelescopeResultsDiffChange = { fg = C.none, bg = C.yellow },
|
||||
TelescopeResultsDiffAdd = { fg = C.none, bg = C.green },
|
||||
TelescopeResultsDiffDelete = { fg = C.none, bg = C.red },
|
||||
TelescopeResultsDiffUntracked = { fg = C.none, bg = C.grey_1 },
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
return {
|
||||
VimwikiLink = { fg = C.cyan, bg = C.none },
|
||||
VimwikiHeaderChar = { fg = C.grey, bg = C.none },
|
||||
VimwikiHR = { fg = C.yellow, bg = C.none },
|
||||
VimwikiList = { fg = C.orange, bg = C.orange },
|
||||
VimwikiTag = { fg = C.orange, bg = C.orange },
|
||||
VimwikiMarkers = { fg = C.grey, bg = C.none },
|
||||
VimwikiHeader1 = { fg = C.orange, bg = C.none, bold = true },
|
||||
VimwikiHeader2 = { fg = C.green, bg = C.none, bold = true },
|
||||
VimwikiHeader3 = { fg = C.blue, bg = C.none, bold = true },
|
||||
VimwikiHeader4 = { fg = C.cyan, bg = C.none, bold = true },
|
||||
VimwikiHeader5 = { fg = C.yellow, bg = C.none, bold = true },
|
||||
VimwikiHeader6 = { fg = C.purple, bg = C.none, bold = true },
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
return {
|
||||
WhichKeyFloat = { fg = C.fg },
|
||||
WhichKeyDesc = { fg = C.blue },
|
||||
WhichKeyGroup = { fg = C.blue },
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
local treesitter = {
|
||||
TSError = { fg = C.red },
|
||||
TSPunctDelimiter = { fg = C.fg },
|
||||
TSPunctBracket = { fg = C.fg },
|
||||
TSPunctSpecial = { fg = C.fg },
|
||||
TSConstant = { fg = C.yellow },
|
||||
TSConstBuiltin = { fg = C.orange },
|
||||
TSConstMacro = { fg = C.red },
|
||||
TSStringRegex = { fg = C.green },
|
||||
TSString = { fg = C.green },
|
||||
TSStringEscap = { fg = C.red },
|
||||
TSCharacter = { fg = C.green },
|
||||
TSNumber = { fg = C.orange },
|
||||
TSBoolean = { fg = C.orange },
|
||||
TSFloat = { fg = C.green },
|
||||
TSAnnotation = { fg = C.yellow },
|
||||
TSAttribute = { fg = C.red },
|
||||
TSNamespace = { fg = C.purple },
|
||||
TSFuncBuiltin = { fg = C.blue },
|
||||
TSFunction = { fg = C.blue },
|
||||
TSFuncMacro = { fg = C.yellow },
|
||||
TSParameter = { fg = C.red },
|
||||
TSParameterReference = { fg = C.cyan },
|
||||
TSMethod = { fg = C.blue },
|
||||
TSField = { fg = C.red },
|
||||
TSProperty = { fg = C.yellow },
|
||||
TSConstructor = { fg = C.yellow },
|
||||
TSConditional = { fg = C.purple },
|
||||
TSRepeat = { fg = C.purple },
|
||||
TSLabel = { fg = C.blue },
|
||||
TSKeyword = { fg = C.purple },
|
||||
TSKeywordFunction = { fg = C.purple },
|
||||
TSKeywordOperator = { fg = C.purple },
|
||||
TSOperator = { fg = C.cyan },
|
||||
TSException = { fg = C.purple },
|
||||
TSType = { fg = C.blue },
|
||||
TSTypeBuiltin = { fg = C.blue },
|
||||
TSStructure = { fg = C.purple },
|
||||
TSInclude = { fg = C.purple },
|
||||
TSVariable = { fg = C.red },
|
||||
TSVariableBuiltin = { fg = C.yellow },
|
||||
TSText = { fg = C.fg },
|
||||
TSTextReference = { fg = C.yellow },
|
||||
TSStrong = { fg = C.blue, style = "bold" },
|
||||
TSEmphasis = { fg = C.purple, style = "italic" },
|
||||
TSUnderline = { fg = C.fg },
|
||||
TSTitle = { fg = C.fg },
|
||||
TSLiteral = { fg = C.fg },
|
||||
TSURI = { fg = C.green },
|
||||
TSTag = { fg = C.red },
|
||||
TSTagDelimiter = { fg = C.fg },
|
||||
markdownTSNone = { fg = C.fg },
|
||||
markdownTSTitle = { fg = C.red },
|
||||
markdownTSLiteral = { fg = C.green },
|
||||
markdownTSPunctSpecial = { fg = C.red },
|
||||
markdownTSPunctDelimiter = { fg = C.fg },
|
||||
}
|
||||
|
||||
return treesitter
|
||||
@@ -0,0 +1,24 @@
|
||||
local M = {}
|
||||
|
||||
local user_settings = astronvim.user_plugin_opts "default_theme"
|
||||
|
||||
function M.parse_diagnostic_style(default)
|
||||
if type(user_settings.diagnostics_style) == "table" then
|
||||
default = vim.tbl_deep_extend("force", user_settings.diagnostics_style, default)
|
||||
elseif type(user_settings.diagnostics_style) == "string" then
|
||||
default.style = user_settings.diagnostics_style
|
||||
end
|
||||
return default
|
||||
end
|
||||
|
||||
function M.parse_style(spec)
|
||||
if spec.style then
|
||||
for match in (spec.style .. ","):gmatch "(.-)," do
|
||||
spec[match] = true
|
||||
end
|
||||
spec.style = nil
|
||||
end
|
||||
return spec
|
||||
end
|
||||
|
||||
return M
|
||||
@@ -0,0 +1,251 @@
|
||||
local config = {
|
||||
|
||||
-- Configure AstroNvim updates
|
||||
updater = {
|
||||
remote = "origin", -- remote to use
|
||||
channel = "nightly", -- "stable" or "nightly"
|
||||
version = "latest", -- "latest", tag name, or regex search like "v1.*" to only do updates before v2 (STABLE ONLY)
|
||||
branch = "main", -- branch name (NIGHTLY ONLY)
|
||||
commit = nil, -- commit hash (NIGHTLY ONLY)
|
||||
pin_plugins = nil, -- nil, true, false (nil will pin plugins on stable only)
|
||||
skip_prompts = false, -- skip prompts about breaking changes
|
||||
show_changelog = true, -- show the changelog after performing an update
|
||||
-- remotes = { -- easily add new remotes to track
|
||||
-- ["remote_name"] = "https://remote_url.come/repo.git", -- full remote url
|
||||
-- ["remote2"] = "github_user/repo", -- GitHub user/repo shortcut,
|
||||
-- ["remote3"] = "github_user", -- GitHub user assume AstroNvim fork
|
||||
-- },
|
||||
},
|
||||
|
||||
-- Set colorscheme
|
||||
colorscheme = "default_theme",
|
||||
|
||||
-- set vim options here (vim.<first_key>.<second_key> = value)
|
||||
options = {
|
||||
opt = {
|
||||
relativenumber = true, -- sets vim.opt.relativenumber
|
||||
},
|
||||
g = {
|
||||
mapleader = " ", -- sets vim.g.mapleader
|
||||
},
|
||||
},
|
||||
|
||||
-- Default theme configuration
|
||||
default_theme = {
|
||||
diagnostics_style = { italic = true },
|
||||
-- Modify the color table
|
||||
colors = {
|
||||
fg = "#abb2bf",
|
||||
},
|
||||
-- Modify the highlight groups
|
||||
highlights = function(highlights)
|
||||
local C = require "default_theme.colors"
|
||||
|
||||
highlights.Normal = { fg = C.fg, bg = C.bg }
|
||||
return highlights
|
||||
end,
|
||||
plugins = { -- enable or disable extra plugin highlighting
|
||||
aerial = true,
|
||||
beacon = false,
|
||||
bufferline = true,
|
||||
dashboard = true,
|
||||
highlighturl = true,
|
||||
hop = false,
|
||||
indent_blankline = true,
|
||||
lightspeed = false,
|
||||
["neo-tree"] = true,
|
||||
notify = true,
|
||||
["nvim-tree"] = false,
|
||||
["nvim-web-devicons"] = true,
|
||||
rainbow = true,
|
||||
symbols_outline = false,
|
||||
telescope = true,
|
||||
vimwiki = false,
|
||||
["which-key"] = true,
|
||||
},
|
||||
},
|
||||
|
||||
-- Disable AstroNvim ui features
|
||||
ui = {
|
||||
nui_input = true,
|
||||
telescope_select = true,
|
||||
},
|
||||
|
||||
-- Configure plugins
|
||||
plugins = {
|
||||
-- Add plugins, the packer syntax without the "use"
|
||||
init = {
|
||||
-- You can disable default plugins as follows:
|
||||
-- ["goolord/alpha-nvim"] = { disable = true },
|
||||
|
||||
-- You can also add new plugins here as well:
|
||||
-- { "andweeb/presence.nvim" },
|
||||
-- {
|
||||
-- "ray-x/lsp_signature.nvim",
|
||||
-- event = "BufRead",
|
||||
-- config = function()
|
||||
-- require("lsp_signature").setup()
|
||||
-- end,
|
||||
-- },
|
||||
},
|
||||
-- All other entries override the setup() call for default plugins
|
||||
["null-ls"] = function(config)
|
||||
local null_ls = require "null-ls"
|
||||
-- Check supported formatters and linters
|
||||
-- https://github.com/jose-elias-alvarez/null-ls.nvim/tree/main/lua/null-ls/builtins/formatting
|
||||
-- https://github.com/jose-elias-alvarez/null-ls.nvim/tree/main/lua/null-ls/builtins/diagnostics
|
||||
config.sources = {
|
||||
-- Set a formatter
|
||||
null_ls.builtins.formatting.rufo,
|
||||
-- Set a linter
|
||||
null_ls.builtins.diagnostics.rubocop,
|
||||
}
|
||||
-- set up null-ls's on_attach function
|
||||
config.on_attach = function(client)
|
||||
-- NOTE: You can remove this on attach function to disable format on save
|
||||
if client.resolved_capabilities.document_formatting then
|
||||
vim.api.nvim_create_autocmd("BufWritePre", {
|
||||
desc = "Auto format before save",
|
||||
pattern = "<buffer>",
|
||||
callback = vim.lsp.buf.formatting_sync,
|
||||
})
|
||||
end
|
||||
end
|
||||
return config -- return final config table
|
||||
end,
|
||||
treesitter = {
|
||||
ensure_installed = { "lua" },
|
||||
},
|
||||
["nvim-lsp-installer"] = {
|
||||
ensure_installed = { "sumneko_lua" },
|
||||
},
|
||||
packer = {
|
||||
compile_path = vim.fn.stdpath "data" .. "/packer_compiled.lua",
|
||||
},
|
||||
},
|
||||
|
||||
-- LuaSnip Options
|
||||
luasnip = {
|
||||
-- Add paths for including more VS Code style snippets in luasnip
|
||||
vscode_snippet_paths = {},
|
||||
-- Extend filetypes
|
||||
filetype_extend = {
|
||||
javascript = { "javascriptreact" },
|
||||
},
|
||||
},
|
||||
|
||||
-- Modify which-key registration
|
||||
["which-key"] = {
|
||||
-- Add bindings
|
||||
register_mappings = {
|
||||
-- first key is the mode, n == normal mode
|
||||
n = {
|
||||
-- second key is the prefix, <leader> prefixes
|
||||
["<leader>"] = {
|
||||
-- which-key registration table for normal mode, leader prefix
|
||||
-- ["N"] = { "<cmd>tabnew<cr>", "New Buffer" },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- CMP Source Priorities
|
||||
-- modify here the priorities of default cmp sources
|
||||
-- higher value == higher priority
|
||||
-- The value can also be set to a boolean for disabling default sources:
|
||||
-- false == disabled
|
||||
-- true == 1000
|
||||
cmp = {
|
||||
source_priority = {
|
||||
nvim_lsp = 1000,
|
||||
luasnip = 750,
|
||||
buffer = 500,
|
||||
path = 250,
|
||||
},
|
||||
},
|
||||
|
||||
-- Extend LSP configuration
|
||||
lsp = {
|
||||
-- enable servers that you already have installed without lsp-installer
|
||||
servers = {
|
||||
-- "pyright"
|
||||
},
|
||||
-- easily add or disable built in mappings added during LSP attaching
|
||||
mappings = {
|
||||
n = {
|
||||
-- ["<leader>lf"] = false -- disable formatting keymap
|
||||
},
|
||||
},
|
||||
-- add to the server on_attach function
|
||||
-- on_attach = function(client, bufnr)
|
||||
-- end,
|
||||
|
||||
-- override the lsp installer server-registration function
|
||||
-- server_registration = function(server, opts)
|
||||
-- require("lspconfig")[server].setup(opts)
|
||||
-- end,
|
||||
|
||||
-- Add overrides for LSP server settings, the keys are the name of the server
|
||||
["server-settings"] = {
|
||||
-- example for addings schemas to yamlls
|
||||
-- yamlls = {
|
||||
-- settings = {
|
||||
-- yaml = {
|
||||
-- schemas = {
|
||||
-- ["http://json.schemastore.org/github-workflow"] = ".github/workflows/*.{yml,yaml}",
|
||||
-- ["http://json.schemastore.org/github-action"] = ".github/action.{yml,yaml}",
|
||||
-- ["http://json.schemastore.org/ansible-stable-2.9"] = "roles/tasks/*.{yml,yaml}",
|
||||
-- },
|
||||
-- },
|
||||
-- },
|
||||
-- },
|
||||
},
|
||||
},
|
||||
|
||||
-- Diagnostics configuration (for vim.diagnostics.config({}))
|
||||
diagnostics = {
|
||||
virtual_text = true,
|
||||
underline = true,
|
||||
},
|
||||
|
||||
mappings = {
|
||||
-- first key is the mode
|
||||
n = {
|
||||
-- second key is the lefthand side of the map
|
||||
["<C-s>"] = { ":w!<cr>", desc = "Save File" },
|
||||
},
|
||||
t = {
|
||||
-- setting a mapping to false will disable it
|
||||
-- ["<esc>"] = false,
|
||||
},
|
||||
},
|
||||
|
||||
-- This function is run last
|
||||
-- good place to configuring augroups/autocommands and custom filetypes
|
||||
polish = function()
|
||||
-- Set key binding
|
||||
-- Set autocommands
|
||||
vim.api.nvim_create_augroup("packer_conf", { clear = true })
|
||||
vim.api.nvim_create_autocmd("BufWritePost", {
|
||||
desc = "Sync packer after modifying plugins.lua",
|
||||
group = "packer_conf",
|
||||
pattern = "plugins.lua",
|
||||
command = "source <afile> | PackerSync",
|
||||
})
|
||||
|
||||
-- Set up custom filetypes
|
||||
-- vim.filetype.add {
|
||||
-- extension = {
|
||||
-- foo = "fooscript",
|
||||
-- },
|
||||
-- filename = {
|
||||
-- ["Foofile"] = "fooscript",
|
||||
-- },
|
||||
-- pattern = {
|
||||
-- ["~/%.config/foo/.*"] = "fooscript",
|
||||
-- },
|
||||
-- }
|
||||
end,
|
||||
}
|
||||
|
||||
return config
|
||||
Reference in New Issue
Block a user