linuxbox/config/nvim/init.lua

206 lines
7.8 KiB
Lua

-------------------------------------------------------------------
-- Settings
-------------------------------------------------------------------
-- vim.opt.winborder = "rounded"
vim.opt.hlsearch = false
vim.opt.tabstop = 4
vim.opt.cursorcolumn = false
vim.opt.ignorecase = true
vim.opt.shiftwidth = 4
vim.opt.smartindent = true
vim.opt.number = true
vim.opt.relativenumber = true
vim.opt.termguicolors = true
vim.opt.undofile = true
vim.opt.signcolumn = "yes"
vim.g.netrw_banner = 0 -- gets rid of the annoying banner for netrw
vim.g.netrw_browse_split = 4 -- open in prior window
vim.g.netrw_altv = 1 -- change from left splitting to right splitting
vim.g.netrw_liststyle = 3 -- tree style view in netrw
-------------------------------------------------------------------
-- Autocommands
-------------------------------------------------------------------
-- -- show cursor line only in active window
-- local cursorLineGrp = vim.api.nvim_create_augroup("CursorLine", { clear = true })
-- vim.api.nvim_create_autocmd(
-- { "InsertLeave", "WinEnter" },
-- { pattern = "*", command = "set cursorline", group = cursorLineGrp }
-- )
-- vim.api.nvim_create_autocmd(
-- { "InsertEnter", "WinLeave" },
-- { pattern = "*", command = "set nocursorline", group = cursorLineGrp }
-- )
-- vim.api.nvim_create_autocmd(
-- { "InsertLeave", "FocusGained" },
-- { pattern = "*", command = "set cursorline", group = cursorLineGrp }
-- )
-- vim.api.nvim_create_autocmd(
-- { "InsertEnter", "FocusLost" },
-- { pattern = "*", command = "set nocursorline", group = cursorLineGrp }
-- )
-------------------------------------------------------------------
-- Plugin installation
-------------------------------------------------------------------
vim.pack.add({
{ src = "https://git.cmtec.se/cm/nightly_cm.nvim.git" },
{ src = "https://github.com/mrjones2014/smart-splits.nvim" },
{ src = "https://github.com/nvim-lua/plenary.nvim" },
{ src = "https://github.com/kdheepak/lazygit.nvim" },
{ src = "https://github.com/echasnovski/mini.icons" },
{ src = "https://github.com/echasnovski/mini.statusline" },
{ src = "https://github.com/echasnovski/mini.pick" },
{ src = "https://github.com/echasnovski/mini.extra" },
{ src = 'https://github.com/neovim/nvim-lspconfig' },
{ src = 'https://github.com/lewis6991/gitsigns.nvim' },
{ src = 'https://github.com/MunifTanjim/nui.nvim' },
{ src = 'https://github.com/folke/noice.nvim' },
{ src = "https://github.com/L3MON4D3/LuaSnip" },
{ src = "https://github.com/rafamadriz/friendly-snippets" },
{ src = 'https://github.com/saghen/blink.cmp' },
})
-------------------------------------------------------------------
-- Plugin config
-------------------------------------------------------------------
require "noice".setup()
local win_config = function()
local height = math.floor(0.618 * vim.o.lines)
local width = math.floor(0.618 * vim.o.columns)
return {
anchor = 'NW',
height = height,
width = width,
row = math.floor(0.5 * (vim.o.lines - height)),
col = math.floor(0.5 * (vim.o.columns - width)),
}
end
require "mini.pick".setup({ window = { config = win_config } })
require "mini.extra".setup()
require "mini.statusline".setup()
require "gitsigns".setup({
signs = {
add = { text = "" },
change = { text = "" },
delete = { text = "" },
topdelete = { text = "" },
changedelete = { text = "" },
untracked = { text = "" },
},
preview_config = {
-- Options passed to nvim_open_win
border = "solid",
style = "minimal",
relative = "cursor",
row = 0,
col = 1,
},
})
-------------------------------------------------------------------
-- Autocomplete
-------------------------------------------------------------------
require("luasnip.loaders.from_vscode").lazy_load()
require("blink.cmp").setup({
signature = { enabled = true },
completion = {
documentation = { auto_show = false, auto_show_delay_ms = 500 },
menu = {
auto_show = true,
draw = {
columns = {
{ "label", "label_description", gap = 1 },
{ "kind_icon", "kind" }
},
}
},
},
sources = {
default = { 'lsp', 'buffer', 'path', 'snippets' },
providers = {
-- defaults to `{ 'buffer' }`
lsp = { fallbacks = {} }
},
},
fuzzy = { implementation = "lua" },
})
-------------------------------------------------------------------
-- LSP config
-------------------------------------------------------------------
vim.lsp.enable({ "lua_ls", "rust_analyzer", "bashls", "pyright", "marksman", "clangd", "yamlls" })
-------------------------------------------------------------------
-- GUI config
-------------------------------------------------------------------
vim.cmd.colorscheme("nightly_cm")
vim.diagnostic.config({
severity_sort = true,
float = { border = "rounded", source = "if_many" },
underline = { severity = vim.diagnostic.severity.ERROR },
signs = {
text = {
[vim.diagnostic.severity.ERROR] = "󰅚 ",
[vim.diagnostic.severity.WARN] = "󰀪 ",
[vim.diagnostic.severity.INFO] = "󰋽 ",
[vim.diagnostic.severity.HINT] = "󰌶 ",
},
} or {},
virtual_text = {
source = "if_many",
spacing = 2,
format = function(diagnostic)
local diagnostic_message = {
[vim.diagnostic.severity.ERROR] = diagnostic.message,
[vim.diagnostic.severity.WARN] = diagnostic.message,
[vim.diagnostic.severity.INFO] = diagnostic.message,
[vim.diagnostic.severity.HINT] = diagnostic.message,
}
return diagnostic_message[diagnostic.severity]
end,
},
})
-------------------------------------------------------------------
-- Keybindings
-------------------------------------------------------------------
local map = vim.keymap.set
vim.g.mapleader = " "
-- QoL bindings
map('i', 'jj', '<Esc>', { noremap = true, silent = true })
map('n', '<leader>u', ':update<CR> :source<CR>', { noremap = true, silent = true })
map('n', '<leader>w', ':write<CR>', { noremap = true, silent = true })
map('n', '<leader>q', ':quit<CR>', { noremap = true, silent = true })
map('n', '<leader>v', ':vsplit<CR>', { noremap = true, silent = true })
-- Git
map('n', '<leader>g', ':LazyGitCurrentFile<CR>', { noremap = true, silent = true })
-- File browser
map('n', '<leader>e', ':25Lex<CR>', { noremap = true, silent = true })
map('n', '<leader>f', ":Pick files<CR>", { noremap = true, silent = true })
map('n', '<leader>h', ":Pick help<CR>", { noremap = true, silent = true })
-- LSP
map('n', '<leader>lf', vim.lsp.buf.format, { noremap = true, silent = true })
-- Global Copy/Paste
map({ 'n', 'v' }, '<leader>y', '"+y', { noremap = true, silent = true })
map({ 'n', 'v' }, '<leader>d', '"+d', { noremap = true, silent = true })
map({ 'n', 'v' }, '<leader>c', '1z=', { noremap = true, silent = true })
-- Smart splits to support TMUX
map({ "n", "t" }, "<A-h>", require("smart-splits").resize_left, { desc = "Resize left" })
map({ "n", "t" }, "<A-j>", require("smart-splits").resize_down, { desc = "Resize down" })
map({ "n", "t" }, "<A-k>", require("smart-splits").resize_up, { desc = "Resize up" })
map({ "n", "t" }, "<A-l>", require("smart-splits").resize_right, { desc = "Resize right" })
map({ "n", "t" }, "<C-h>", require("smart-splits").move_cursor_left, { desc = "Move cursor left" })
map({ "n", "t" }, "<C-j>", require("smart-splits").move_cursor_down, { desc = "Move cursor down" })
map({ "n", "t" }, "<C-k>", require("smart-splits").move_cursor_up, { desc = "Move cursor up" })
map({ "n", "t" }, "<C-l>", require("smart-splits").move_cursor_right, { desc = "Move cursor right" })
map("n", "<leader><leader>h", require("smart-splits").swap_buf_left, { desc = "Swap buffer left" })
map("n", "<leader><leader>j", require("smart-splits").swap_buf_down, { desc = "Swap buffer down" })
map("n", "<leader><leader>k", require("smart-splits").swap_buf_up, { desc = "Swap buffer up" })
map("n", "<leader><leader>l", require("smart-splits").swap_buf_right, { desc = "Swap buffer right" })