New version: created v3

This commit is contained in:
Keyitdev
2022-07-23 15:08:47 +02:00
parent eb3bdd5962
commit a2d46e7b94
551 changed files with 103679 additions and 4704 deletions
+19
View File
@@ -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
+52
View File
@@ -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
+40
View File
@@ -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
+33
View File
@@ -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
+19
View File
@@ -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
+4
View File
@@ -0,0 +1,4 @@
local status_ok, cinnamon = pcall(require, "cinnamon")
if status_ok then
cinnamon.setup(astronvim.user_plugin_opts("plugins.cinnamon", {}))
end
+119
View File
@@ -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
+18
View File
@@ -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
+46
View File
@@ -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
+12
View File
@@ -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
+17
View File
@@ -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
+50
View File
@@ -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
+167
View File
@@ -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
+55
View File
@@ -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 }
+16
View File
@@ -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
+70
View File
@@ -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
+6
View File
@@ -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
+4
View File
@@ -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
+12
View File
@@ -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
+96
View File
@@ -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
+16
View File
@@ -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
+26
View File
@@ -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
+21
View File
@@ -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
+104
View File
@@ -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" })
+420
View File
@@ -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))
+67
View File
@@ -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")
)
+354
View File
@@ -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()
+122
View File
@@ -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
+143
View File
@@ -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
+101
View File
@@ -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
+299
View File
@@ -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
+160
View File
@@ -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
+89
View File
@@ -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
+76
View File
@@ -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)
+49
View File
@@ -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
+26
View File
@@ -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
+24
View File
@@ -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
+251
View File
@@ -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