206 lines
7.8 KiB
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" })
|