268 lines
8.1 KiB
Lua
268 lines
8.1 KiB
Lua
-- Read the docs: https://www.lunarvim.org/docs/configuration
|
||
-- Example configs: https://github.com/LunarVim/starter.lvim
|
||
-- Video Tutorials: https://www.youtube.com/watch?v=sFA9kX-Ud_c&list=PLhoH5vyxr6QqGu0i7tt_XoVK9v-KvZ3m6
|
||
-- Forum: https://www.reddit.com/r/lunarvim/
|
||
-- Discord: https://discord.com/invite/Xb9B4Ny
|
||
--
|
||
-- General
|
||
lvim.log.level = "warn"
|
||
lvim.format_on_save = false
|
||
lvim.colorscheme = "onedark"
|
||
vim.opt.tabstop = 4
|
||
vim.opt.softtabstop = 4
|
||
vim.opt.shiftwidth = 4
|
||
|
||
vim.api.nvim_create_autocmd("FileType", {
|
||
pattern = "cpp",
|
||
command = "setlocal shiftwidth=2 tabstop=2"
|
||
})
|
||
lvim.builtin.treesitter.ensure_installed = {
|
||
"lua",
|
||
"rust",
|
||
"toml",
|
||
}
|
||
lvim.builtin.nvimtree.setup.renderer.icons.show.git = false
|
||
|
||
-- Keybind
|
||
lvim.builtin.which_key.mappings["g"].g = { "<cmd>ToggleTerm<cr><cmd>TermExec cmd='gitui&&exit'<CR>", "Gitui" }
|
||
lvim.builtin.which_key.mappings["s"].B = { "<cmd>Telescope git_branches<CR>", "Checkout branch" }
|
||
lvim.builtin.which_key.mappings["s"].b = { "<cmd>Telescope buffers<CR>", "Buffer" }
|
||
lvim.builtin.which_key.mappings["t"] = {
|
||
name = "+Terminal",
|
||
r = { "<cmd>ToggleTerm<cr>", "Floating terminal" },
|
||
y = { "<cmd>ToggleTerm size=60 direction=vertical<cr>", "Split vertical" },
|
||
t = { "<cmd>ToggleTerm size=15 direction=horizontal<cr>", "Split horizontal" },
|
||
}
|
||
|
||
-- Plugins
|
||
lvim.plugins = {
|
||
--RUST
|
||
"simrat39/rust-tools.nvim",
|
||
{
|
||
"saecki/crates.nvim",
|
||
version = "v0.3.0",
|
||
dependencies = { "nvim-lua/plenary.nvim" },
|
||
config = function()
|
||
require("crates").setup {
|
||
null_ls = {
|
||
enabled = true,
|
||
name = "crates.nvim",
|
||
},
|
||
popup = {
|
||
border = "rounded",
|
||
},
|
||
}
|
||
end,
|
||
},
|
||
{ "slint-ui/vim-slint" },
|
||
-- General
|
||
{
|
||
"j-hui/fidget.nvim",
|
||
config = function()
|
||
require("fidget").setup()
|
||
end,
|
||
},
|
||
{ "navarasu/onedark.nvim" },
|
||
{ "folke/tokyonight.nvim" },
|
||
{
|
||
"Pocco81/auto-save.nvim",
|
||
config = function()
|
||
require("auto-save").setup()
|
||
end,
|
||
},
|
||
{ 'kevinhwang91/nvim-ufo' },
|
||
{ 'kevinhwang91/promise-async' },
|
||
-- Markdonw
|
||
{
|
||
"iamcco/markdown-preview.nvim",
|
||
build = function() vim.fn["mkdp#util#install"]() end,
|
||
},
|
||
}
|
||
|
||
-- Themes
|
||
require('onedark').setup {
|
||
style = 'darker', -- Default theme style. Choose between 'dark', 'darker', 'cool', 'deep', 'warm', 'warmer' and 'light'
|
||
toggle_style_key = "<leader>ss",
|
||
transparent = false, -- Show/hide background
|
||
|
||
code_style = {
|
||
comments = 'italic',
|
||
keywords = 'italic,',
|
||
functions = 'bold',
|
||
strings = 'none',
|
||
variables = 'none'
|
||
},
|
||
}
|
||
|
||
-- folding
|
||
vim.o.foldcolumn = '2' -- '0' is not bad
|
||
vim.o.foldlevel = 99 -- Using ufo provider need a large value, feel free to decrease the value
|
||
vim.o.foldlevelstart = 99
|
||
vim.o.foldenable = true
|
||
vim.opt.fillchars = {
|
||
vert = "▕", -- alternatives │
|
||
fold = " ",
|
||
eob = " ", -- suppress ~ at EndOfBuffer
|
||
diff = "╱", -- alternatives = ⣿ ░ ─
|
||
msgsep = "‾",
|
||
foldopen = "",
|
||
foldsep = "│",
|
||
foldclose = "",
|
||
}
|
||
local fcs = vim.opt.fillchars:get()
|
||
|
||
-- Stolen from Akinsho
|
||
local function get_fold(lnum)
|
||
if vim.fn.foldlevel(lnum) <= vim.fn.foldlevel(lnum - 1)
|
||
then
|
||
return ' '
|
||
end
|
||
local fold_sym =
|
||
vim.fn.foldclosed(lnum) == -1 and fcs.foldopen or fcs.foldclose
|
||
return fold_sym
|
||
end
|
||
_G.get_statuscol = function() return "%s%l " .. get_fold(vim.v.lnum) .. " " end
|
||
vim.o.statuscolumn = "%!v:lua.get_statuscol()"
|
||
|
||
|
||
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
||
capabilities.textDocument.foldingRange = {
|
||
dynamicRegistration = false,
|
||
lineFoldingOnly = true
|
||
}
|
||
local language_servers = require("lspconfig").util.available_servers() -- or list servers manually like {'gopls', 'clangd'}
|
||
for _, ls in ipairs(language_servers) do
|
||
require('lspconfig')[ls].setup({
|
||
capabilities = capabilities
|
||
-- you can add other fields for setting up lsp server in this table
|
||
})
|
||
end
|
||
require('ufo').setup()
|
||
|
||
|
||
|
||
-- Java
|
||
vim.list_extend(lvim.lsp.automatic_configuration.skipped_servers, { "jdtls" })
|
||
local lspconfig = require('lspconfig')
|
||
local lombok = vim.fn.stdpath('data') .. '/mason/packages/jdtls/lombok.jar'
|
||
lspconfig.jdtls.setup { cmd = { "jdtls", "--jvm-arg=-javaagent:" .. lombok } }
|
||
|
||
|
||
|
||
-- RUST CONFIG
|
||
vim.list_extend(lvim.lsp.automatic_configuration.skipped_servers, { "rust_analyzer" })
|
||
|
||
local mason_path = vim.fn.glob(vim.fn.stdpath "data" .. "/mason/")
|
||
|
||
local codelldb_path = mason_path .. "bin/codelldb"
|
||
local liblldb_path = mason_path .. "packages/codelldb/extension/lldb/lib/liblldb"
|
||
local this_os = vim.loop.os_uname().sysname
|
||
|
||
-- The path in windows is different
|
||
if this_os:find "Windows" then
|
||
codelldb_path = mason_path .. "packages\\codelldb\\extension\\adapter\\codelldb.exe"
|
||
liblldb_path = mason_path .. "packages\\codelldb\\extension\\lldb\\bin\\liblldb.dll"
|
||
else
|
||
-- The liblldb extension is .so for linux and .dylib for macOS
|
||
liblldb_path = liblldb_path .. (this_os == "Linux" and ".so" or ".dylib")
|
||
end
|
||
|
||
pcall(function()
|
||
require("rust-tools").setup {
|
||
tools = {
|
||
executor = require("rust-tools/executors").termopen, -- can be quickfix or termopen
|
||
reload_workspace_from_cargo_toml = true,
|
||
runnables = {
|
||
use_telescope = true,
|
||
},
|
||
inlay_hints = {
|
||
auto = true,
|
||
only_current_line = false,
|
||
show_parameter_hints = false,
|
||
parameter_hints_prefix = "<-",
|
||
other_hints_prefix = "=>",
|
||
max_len_align = false,
|
||
max_len_align_padding = 1,
|
||
right_align = false,
|
||
right_align_padding = 7,
|
||
highlight = "Comment",
|
||
},
|
||
hover_actions = {
|
||
border = "rounded",
|
||
},
|
||
on_initialized = function()
|
||
vim.api.nvim_create_autocmd({ "BufWritePost", "BufEnter", "CursorHold", "InsertLeave" }, {
|
||
pattern = { "*.rs" },
|
||
callback = function()
|
||
-- local _, _ = pcall(vim.lsp.codelens.refresh)
|
||
end,
|
||
})
|
||
end,
|
||
},
|
||
dap = {
|
||
-- adapter= codelldb_adapter,
|
||
adapter = require("rust-tools.dap").get_codelldb_adapter(codelldb_path, liblldb_path),
|
||
},
|
||
server = {
|
||
on_attach = function(client, bufnr)
|
||
require("lvim.lsp").common_on_attach(client, bufnr)
|
||
local rt = require "rust-tools"
|
||
vim.keymap.set("n", "K", rt.hover_actions.hover_actions, { buffer = bufnr })
|
||
end,
|
||
|
||
capabilities = require("lvim.lsp").common_capabilities(),
|
||
settings = {
|
||
["rust-analyzer"] = {
|
||
lens = {
|
||
enable = true,
|
||
},
|
||
checkOnSave = {
|
||
enable = true,
|
||
command = "clippy",
|
||
},
|
||
},
|
||
},
|
||
},
|
||
}
|
||
end)
|
||
|
||
lvim.builtin.dap.on_config_done = function(dap)
|
||
dap.adapters.codelldb = require("rust-tools.dap").get_codelldb_adapter(codelldb_path, liblldb_path)
|
||
dap.configurations.rust = {
|
||
{
|
||
name = "Launch file",
|
||
type = "codelldb",
|
||
request = "launch",
|
||
program = function()
|
||
return vim.fn.input("Path to executable: ", vim.fn.getcwd() .. "/", "file")
|
||
end,
|
||
cwd = "${workspaceFolder}",
|
||
stopOnEntry = false,
|
||
},
|
||
}
|
||
end
|
||
|
||
vim.api.nvim_set_keymap("n", "<m-d>", "<cmd>RustOpenExternalDocs<Cr>", { noremap = true, silent = true })
|
||
|
||
lvim.builtin.which_key.mappings["C"] = {
|
||
name = "Rust",
|
||
r = { "<cmd>RustRunnables<Cr>", "Runnables" },
|
||
t = { "<cmd>lua _CARGO_TEST()<cr>", "Cargo Test" },
|
||
m = { "<cmd>RustExpandMacro<Cr>", "Expand Macro" },
|
||
c = { "<cmd>RustOpenCargo<Cr>", "Open Cargo" },
|
||
p = { "<cmd>RustParentModule<Cr>", "Parent Module" },
|
||
d = { "<cmd>RustDebuggables<Cr>", "Debuggables" },
|
||
v = { "<cmd>RustViewCrateGraph<Cr>", "View Crate Graph" },
|
||
R = {
|
||
"<cmd>lua require('rust-tools/workspace_refresh')._reload_workspace_from_cargo_toml()<Cr>",
|
||
"Reload Workspace",
|
||
},
|
||
o = { "<cmd>RustOpenExternalDocs<Cr>", "Open External Docs" },
|
||
y = { "<cmd>lua require'crates'.open_repository()<cr>", "[crates] open repository" },
|
||
P = { "<cmd>lua require'crates'.show_popup()<cr>", "[crates] show popup" },
|
||
i = { "<cmd>lua require'crates'.show_crate_popup()<cr>", "[crates] show info" },
|
||
f = { "<cmd>lua require'crates'.show_features_popup()<cr>", "[crates] show features" },
|
||
D = { "<cmd>lua require'crates'.show_dependencies_popup()<cr>", "[crates] show dependencies" },
|
||
}
|
||
|