2024-09-17 15:02:57 -03:00

309 lines
15 KiB
Lua

-- AstroCore provides a central place to modify mappings, vim options, autocommands, and more!
-- Configuration documentation can be found with `:h astrocore`
-- NOTE: We highly recommend setting up the Lua Language Server (`:LspInstall lua_ls`)
-- as this provides autocomplete and documentation while editing
local utils = require "utils"
local astro_utils = require "astrocore"
---@type LazySpec
return {
"AstroNvim/astrocore",
---@type AstroCoreOpts
opts = {
sessions = {
autosave = {
last = true,
cwd = true,
},
ignore = {
dirs = { "wiki" },
},
},
-- Configure core features of AstroNvim
features = {
large_buf = { size = 1024 * 500, lines = 10000 }, -- set global limits for large files for disabling features like treesitter
autopairs = true, -- enable autopairs at start
cmp = true, -- enable completion at start
diagnostics_mode = 3, -- diagnostic mode on start (0 = off, 1 = no signs/virtual text, 2 = no virtual text, 3 = on)
highlighturl = true, -- highlight URLs at start
notifications = true, -- enable notifications at start
},
-- Diagnostics configuration (for vim.diagnostics.config({...})) when diagnostics are on
diagnostics = {
virtual_text = true,
underline = true,
},
-- vim options can be configured here
options = {
opt = { -- vim.opt.<key>
relativenumber = true, -- sets vim.opt.relativenumber
number = true, -- sets vim.opt.number
spell = false, -- sets vim.opt.spell
signcolumn = "auto", -- sets vim.opt.signcolumn to auto
wrap = false, -- sets vim.opt.wrap
expandtab = false,
tabstop = 8,
shiftwidth = 8,
showtabline = 8,
vim.opt.rtp:append("/usr/share/vim/vimfiles"),
vim.opt.cinoptions:append("(0");
},
g = { -- vim.g.<key>
-- configure global vim variables (vim.g)
-- NOTE: `mapleader` and `maplocalleader` must be set in the AstroNvim opts or before `lazy.setup`
-- This can be found in the `lua/lazy_setup.lua` file
mapleader = " ", -- sets vim.g.mapleader
autoformat_enabled = false, -- enable or disable auto formatting at start (lsp.formatting.format_on_save must be enabled)
cmp_enabled = true, -- enable completion at start
autopairs_enabled = true, -- enable autopairs at start
diagnostics_mode = 3, -- set the visibility of diagnostics in the UI (0=off, 1=only show in status line, 2=virtual text off, 3=all on)
icons_enabled = true, -- disable icons in the UI (disable if no nerd font is available, requires :PackerSync after changing)
ui_notifications_enabled = true, -- disable notifications when toggling UI elements
c_syntax_for_h = 1,
wiki_root = '~/Documentos/Wiki',
wiki_journal = {
name = "journal",
frequency = "daily",
date_format = {
daily = "%Y/%m/%d",
},
},
wiki_viewer = {
png = "feh",
jpg = "feh",
jpeg = "feh",
},
infoprg = '/usr/bin/info'
},
},
-- Mappings can be configured through AstroCore as well.
-- NOTE: keycodes follow the casing in the vimdocs. For example, `<Leader>` must be capitalized
mappings = {
-- first key is the mode
n = {
-- second key is the lefthand side of the map
-- navigate buffer tabs with `H` and `L`
L = { function() require("astrocore.buffer").nav(vim.v.count1) end, desc = "Next buffer" },
H = { function() require("astrocore.buffer").nav(-vim.v.count1) end, desc = "Previous buffer" },
-- mappings seen under group name "Buffer"
["<Leader>bD"] = {
function()
require("astroui.status.heirline").buffer_picker(
function(bufnr) require("astrocore.buffer").close(bufnr) end
)
end,
desc = "Pick to close",
},
-- tables with just a `desc` key will be registered with which-key if it's installed
-- this is useful for naming menus
["<Leader>b"] = { desc = "Buffers" },
-- quick save
-- disable default bindings
["<C-Down>"] = false,
["<C-Left>"] = false,
["<C-Right>"] = false,
["<C-Up>"] = false,
["<C-h>"] = false,
["<C-j>"] = false,
["<C-k>"] = false,
["<C-l>"] = false,
["<C-q>"] = false,
["<C-s>"] = false,
["<C-r>"] = false,
-- Competitest
["<C-o>"] = { "<cmd>CompetiTest receive problem<cr>", desc = "Open problem" },
["<C-r>"] = { "<cmd>CompetiTest run<cr>", desc = "Run problem" },
["q:"] = ":",
-- second key is the lefthand side of the map
-- mappings seen under group name "Buffer"
["<Leader>bn"] = { "<cmd>tabnew<cr>", desc = "New tab" },
["<Leader>bD"] = {
function()
require("astroui.status").heirline.buffer_picker(function(bufnr) require("astrocore.buffer").close(bufnr) end)
end,
desc = "Pick to close",
},
["<Leader>bb"] = { "<cmd>tabnew<cr>", desc = "New tab" },
["<Leader>bc"] = { "<cmd>BufferLinePickClose<cr>", desc = "Pick to close" },
["<Leader>bj"] = { "<cmd>BufferLinePick<cr>", desc = "Pick to jump" },
["<Leader>bt"] = { "<cmd>BufferLineSortByTabs<cr>", desc = "Sort by tabs" },
["<Leader>lp"] = { "<cmd>ClangdToggleInlayHints<cr>", desc = "Toggle inlay hints" },
["<Leader>lH"] = { "<cmd>ClangdSwitchSourceHeader<cr>", desc = "Switch between source and header" },
["L"] =
{ function() require("astrocore.buffer").nav(vim.v.count > 0 and vim.v.count or 1) end, desc = "Next buffer" },
["H"] = {
function() require("astrocore.buffer").nav(-(vim.v.count > 0 and vim.v.count or 1)) end,
desc = "Previous buffer",
},
["<F2>"] = { function() vim.lsp.buf.rename() end, desc = "Rename current symbol" },
["<F8>"] = {"<cmd>2TermExec cmd=\"%:p:r\"<cr>", desc = "Execute file"},
["et"] = {"<cmd>term %:p:r<cr>"},
["<C-'>"] = {"<cmd>ToggleTerm<cr>", desc = "Toggle terminal"},
["<C-n>"] = { "<cmd>Neotree toggle<cr>", desc = "Toggle Explorer" },
-- tables with the `name` key will be registered with which-key if it's installed
-- this is useful for naming menus
["<Leader>b"] = { desc = "Buffers" },
-- quick save
-- ["<C-s>"] = { ":w!<cr>", desc = "Save File" }, -- change description but the same command
n = { utils.better_search "n", desc = "Next search" },
N = { utils.better_search "N", desc = "Previous search" },
["<Up>"] = { function() require("smart-splits").resize_up(2) end, desc = "Resize split up" },
["<Down>"] = { function() require("smart-splits").resize_down(2) end, desc = "Resize split down" },
["<Left>"] = { function() require("smart-splits").resize_left(2) end, desc = "Resize split left" },
["<Right>"] = { function() require("smart-splits").resize_right(2) end, desc = "Resize split right" },
["<Tab>"] = {
function()
if #vim.t.bufs > 1 then
require("telescope.builtin").buffers { sort_mru = true, ignore_current_buffer = true }
else
astro_utils.notify "No other buffers open"
end
end,
desc = "Switch Buffers",
},
["<Leader>N"] = { "<cmd>tabnew<cr>", desc = "New Tab" },
["<Leader><cr>"] = { '<esc>/<++><cr>"_c4l', desc = "Next Template" },
["<Leader>."] = { "<cmd>cd %:p:h<cr>", desc = "Set CWD" },
-- neogen
["<Leader>a"] = { desc = "󰏫 Annotate" },
["<Leader>a<cr>"] = { function() require("neogen").generate() end, desc = "Current" },
["<Leader>ac"] = { function() require("neogen").generate { type = "class" } end, desc = "Class" },
["<Leader>af"] = { function() require("neogen").generate { type = "func" } end, desc = "Function" },
["<Leader>at"] = { function() require("neogen").generate { type = "type" } end, desc = "Type" },
["<Leader>aF"] = { function() require("neogen").generate { type = "file" } end, desc = "File" },
-- telescope plugin mappings
["<Leader>fx"] = {
function() require("telescope").extensions.live_grep_args.live_grep_args() end,
desc = "Find words (args)",
},
["<Leader>fB"] = { "<cmd>Telescope bibtex<cr>", desc = "Find BibTeX" },
["<Leader>fe"] = { "<cmd>Telescope file_browser<cr>", desc = "File explorer" },
["<Leader>fp"] = { function() require("telescope").extensions.projects.projects {} end, desc = "Find projects" },
["<Leader>fT"] = { "<cmd>TodoTelescope<cr>", desc = "Find TODOs" },
-- compiler
["<Leader>m"] = { desc = "󱁤 Compiler" },
["<Leader>mk"] = {
function()
vim.cmd "silent! write"
local filename = vim.fn.expand "%:t"
utils.async_run({ "compiler", vim.fn.expand "%:p" }, function() astro_utils.notify("Compiled " .. filename) end)
end,
desc = "Compile",
},
["<Leader>ma"] = {
function()
vim.notify "Autocompile Started"
utils.async_run({ "autocomp", vim.fn.expand "%:p" }, function() astro_utils.notify "Autocompile stopped" end)
end,
desc = "Auto Compile",
},
["<Leader>mv"] = {
function() vim.fn.jobstart { "opout", vim.fn.expand "%:p" } end,
desc = "View Output",
},
["<Leader>mb"] = {
function()
local filename = vim.fn.expand "%:t"
utils.async_run({
"pandoc",
vim.fn.expand "%",
"--pdf-engine=xelatex",
"--variable",
"urlcolor=blue",
"-t",
"beamer",
"-o",
vim.fn.expand "%:r" .. ".pdf",
}, function() astro_utils.notify("Compiled " .. filename) end)
end,
desc = "Compile Beamer",
},
["<Leader>mp"] = {
function()
local pdf_path = vim.fn.expand "%:r" .. ".pdf"
if vim.fn.filereadable(pdf_path) == 1 then vim.fn.jobstart { "pdfpc", pdf_path } end
end,
desc = "Present Output",
},
["<Leader>ml"] = { function() utils.toggle_qf() end, desc = "Logs" },
["<Leader>mt"] = { "<cmd>TexlabBuild<cr>", desc = "LaTeX" },
["<Leader>mf"] = { "<cmd>TexlabForward<cr>", desc = "Forward Search" },
["<Leader>r"] = { desc = " REPL" },
["<Leader>rr"] = { "<Plug>Send", desc = "Send to REPL" },
["<Leader>rl"] = { "<Plug>SendLine", desc = "Send line to REPL" },
["<Leader>r<cr>"] = { "<cmd>SendHere<cr>", desc = "Set REPL" },
["<Leader>z"] = { "<cmd>ZenMode<cr>", desc = "Zen Mode" },
["<Leader>s"] = { desc = "󰛔 Search/Replace" },
["<Leader>ss"] = { function() require("spectre").toggle() end, desc = "Toggle Spectre" },
["<Leader>sf"] = { function() require("spectre").open_file_search() end, desc = "Spectre (current file)" },
["<Leader>sw"] = {
function() require("spectre").open_visual { select_word = true } end,
desc = "Spectre (current word)",
},
["<Leader>x"] = { desc = "󰒡 Trouble" },
["<Leader>xx"] = { "<cmd>TroubleToggle document_diagnostics<cr>", desc = "Document Diagnostics (Trouble)" },
["<Leader>xX"] = { "<cmd>TroubleToggle workspace_diagnostics<cr>", desc = "Workspace Diagnostics (Trouble)" },
["<Leader>xl"] = { "<cmd>TroubleToggle loclist<cr>", desc = "Location List (Trouble)" },
["<Leader>xq"] = { "<cmd>TroubleToggle quickfix<cr>", desc = "Quickfix List (Trouble)" },
["<Leader>xT"] = { "<cmd>TodoTrouble<cr>", desc = "TODOs (Trouble)" },
-- Wiki mappings
["<Leader>w"] = { desc = "󰖬 Wiki" },
["<Leader>wn"] = { "<Plug>(wiki-open)", desc = "Open/create wiki page" },
["<Leader>ww"] = { "<Plug>(wiki-index)", desc = "Open wiki index" },
["<Leader>wx"] = { "<Plug>(wiki-reload)", desc = "Reload wiki" },
["<Leader>wp"] = { "<Plug>(wiki-pages)", desc = "Open wiki page" },
["<Leader>wt"] = { "<Plug>(wiki-tags)", desc = "Open wiki from tags" },
["<Leader>wd"] = { "<Plug>(wiki-page-delete)", desc = "Delete wiki page" },
["<Leader>wf"] = { "<Plug>(wiki-link-transform)", desc = "Transform link" },
["<Leader>wr"] = { "<Plug>(wiki-page-rename)", desc = "Rename wiki page" },
["<Leader>wT"] = { "<Plug>(wiki-toc-generate-local)", desc = "Create local table" },
["<Leader>wg"] = { desc = "Graphs" },
["<Leader>wgb"] = { "<Plug>(wiki-graph-find-backlinks)", desc = "Find backlinks" },
["<Leader>wbC"] = { "<Plug>(wiki-graph-check-links-g)", desc = "Check wiki for broken links" },
["<Leader>wbc"] = { "<Plug>(wiki-graph-check-links)", desc = "Check page for broken links" },
["<Leader>wbi"] = { "<Plug>(wiki-graph-in)", desc = "Show link graph in to page" },
["<Leader>wbo"] = { "<Plug>(wiki-graph-out)", desc = "Show link graph out of page" },
["<Leader>wbO"] = { "<Plug>(wiki-graph-check-orphans)", desc = "Check wiki for orphan pages" },
["<Leader>wbr"] = { "<Plug>(wiki-graph-related)", desc = "Open page link relations" },
["<Leader>wl"] = { desc = "Links" },
["<Leader>wlh"] = { "<Plug>(wiki-link-extract-header)", desc = "Set link titles from first header" },
["<Leader>wli"] = { "<Plug>(wiki-link-incoming-toggle)", desc = "Toggle incoming links" },
["<Leader>wlI"] = { "<Plug>(wiki-link-incoming-hover)", desc = "Show incoming links" },
["<Leader>wll"] = { "<Plug>(wiki-link-show)", desc = "Show link info" },
["<Leader>ws"] = { desc = "Tags" },
["<Leader>wsl"] = { "<Plug>(wiki-tag-list)", desc = "List all tags" },
["<Leader>wsn"] = { "<Plug>(wiki-tag-rename)", desc = "Rename tag" },
["<Leader>wsr"] = { "<Plug>(wiki-tag-reload)", desc = "Reload tags" },
["<Leader>wss"] = { "<Plug>(wiki-tag-search)", desc = "List pages with tag" },
["<Leader>w<space>"] = { desc = "Journal" },
-- ["<Leader>w<space>w"] = { "<Plug>(wiki-journal)Go<enter><esc>!!date +\\%R<cr>I# <C-o>o<enter>", desc = "Open wiki journal" },
["<Leader>w<space>w"] = { "<cmd>TermExec cmd='fish -c journal;exit'<cr>", desc = "Open journal" },
["<C-s>"] = { ":w!<cr>", desc = "Save File" }, -- change description but the same command
["<C-l>"] = { function() require("luasnip").jump(1) end, desc = "Jump to next snippet" },
},
v = {
["<Leader>s"] = { function() require("spectre").open_visual() end, desc = "Spectre" },
},
t = {
-- setting a mapping to false will disable it
-- ["<esc>"] = false,
},
x = {
-- better increment/decrement
["+"] = { "g<C-a>", desc = "Increment number" },
["-"] = { "g<C-x>", desc = "Descrement number" },
-- Easy-Align
ga = { "<Plug>(EasyAlign)", desc = "Easy Align" },
},
o = {
-- line text-objects
["il"] = { ":normal vil<cr>", desc = "Inside line text object" },
["al"] = { ":normal val<cr>", desc = "Around line text object" },
},
},
},
}