Files
dotfiles/lvim/config.lua
2024-06-20 14:14:30 +02:00

268 lines
8.1 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 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" },
}