dot/nvim/init.lua
2025-11-28 00:51:56 +01:00

185 lines
5.8 KiB
Lua

-- nvim optimizations
vim.loader.enable()
-- bootstrap lazy.nvim
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", lazypath })
end
vim.opt.rtp:prepend(lazypath)
require("lazy").setup({
{ "nvim-lualine/lualine.nvim" },
{ "nvim-telescope/telescope.nvim",lazy = false, dependencies = "nvim-lua/plenary.nvim" },
{ "neovim/nvim-lspconfig" },
{ "williamboman/mason.nvim", config = true },
{ "mason-org/mason-lspconfig.nvim", opts = {}, dependencies = {"mason-org/mason.nvim"}},
{ "nvim-treesitter/nvim-treesitter", build = ":TSUpdate",
config = function()
require("nvim-treesitter.configs").setup({
highlight = { enable = true },
indent = { enable = true },
})
end,},
{ "hrsh7th/nvim-cmp", dependencies = {
"hrsh7th/cmp-nvim-lsp",
"hrsh7th/cmp-buffer",
"hrsh7th/cmp-path",
"L3MON4D3/LuaSnip",
"saadparwaiz1/cmp_luasnip",
}
},
{ "akinsho/toggleterm.nvim", version = "*", config = true },
{ "sindrets/diffview.nvim", dependencies = "nvim-lua/plenary.nvim" },
{ "airblade/vim-gitgutter" },
{ "sphamba/smear-cursor.nvim",
opts = {
smear_between_buffers = true,
smear_between_neighbor_lines = true,
scroll_buffer_space = true,
legacy_computing_symbols_support = false,
smear_insert_mode = true,
},
},
{ 'windwp/nvim-autopairs', event = "InsertEnter", config = true },
{
"FabijanZulj/blame.nvim",
lazy = false,
config = function()
require('blame').setup {}
end,
},
{
"rebelot/kanagawa.nvim",
config = function()
require("kanagawa").setup({
commentStyle = { italic = false },
keywordStyle = { italic = false },
statementStyle = { bold = true },
transparent = true,
theme = "dragon",
background = { dark = "dragon"}
})
vim.cmd("colorscheme kanagawa")
end,
},
})
-- neovim configuration
vim.o.termguicolors = true
vim.o.encoding = 'utf-8'
vim.o.fileencoding = 'utf-8'
vim.o.tabstop = 4
vim.o.softtabstop = 4
vim.o.shiftwidth = 4
vim.o.expandtab = true
vim.o.smartindent = true
vim.o.number = true
vim.o.cursorline = true
vim.o.clipboard = 'unnamedplus'
vim.o.wildmenu = true
vim.o.laststatus = 0
vim.o.cmdheight = 0
vim.o.undofile = true
vim.o.hlsearch = true
vim.o.incsearch = true
vim.o.ignorecase = true
vim.o.smartcase = true
vim.o.errorbells = false
vim.g.mapleader = ' '
vim.o.mouse = nil
vim.o.autoread = true
vim.o.swapfile = true
vim.o.wildmode = longest
-- Telescope Keybinds
vim.keymap.set('n', '<leader><leader>', require('telescope.builtin').find_files)
vim.keymap.set('n', '<leader>fg', require('telescope.builtin').live_grep)
vim.keymap.set('n', '<leader>fb', require('telescope.builtin').buffers)
vim.keymap.set('n', '<leader>fh', require('telescope.builtin').help_tags)
vim.keymap.set('n', '<leader>fr', require('telescope.builtin').lsp_references)
vim.keymap.set('n', '<leader>frr', require('telescope.builtin').diagnostics)
-- Error Keymaps
vim.keymap.set('n', '<leader>nr', vim.diagnostic.goto_next);
vim.keymap.set('n', '<leader>or', vim.diagnostic.open_float);
-- transparent background
-- vim.api.nvim_set_hl(0, 'Normal', { bg = 'none' })
-- vim.api.nvim_set_hl(0, 'NormalFloat', { bg = 'none' })
-- vim.api.nvim_set_hl(0, 'FloatBorder', { bg = 'none' })
-- vim.api.nvim_set_hl(0, 'Pmenu', { bg = 'none' })
-- Format go files
vim.keymap.set('n', '<leader>gf', function() require('go.format').goimport() end)
-- Diffview
vim.api.nvim_set_keymap('n', '<leader>do', ':DiffviewOpen<CR>', { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<leader>dc', ':DiffviewClose<CR>', { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<leader>dh', ':DiffviewFileHistory<CR>', { noremap = true, silent = true })
local capabilities = require('cmp_nvim_lsp').default_capabilities()
local lspconfig = require("lspconfig")
local cmp = require'cmp'
cmp.setup({
snippet = { expand = function(args) require('luasnip').lsp_expand(args.body) end },
mapping = cmp.mapping.preset.insert({
['<A-Space>'] = cmp.mapping.complete(),
['<Tab>'] = cmp.mapping.confirm({ select = true }),
['<Down>'] = cmp.mapping.select_next_item(),
['<Up>'] = cmp.mapping.select_prev_item(),
}),
sources = cmp.config.sources({
{ name = 'nvim_lsp' },
{ name = 'luasnip' },
}, {
{ name = 'buffer' },
{ name = 'path' },
})
})
require("mason").setup()
require("mason-lspconfig").setup({
automatic_installation = true,
})
require('lualine').setup {
options = {
theme = 'iceberg_dark',
section_separators = '',
component_separators = '',
icons_enabled = true,
globalstatus = true,
always_divide_middle = false,
always_show_tabline = false,
draw_empty = true,
color = nil,
},
sections = {
lualine_a = {'mode'},
lualine_b = {'branch','diff','diagnostics'},
lualine_c = {
{
'filename',
file_status = true,
newfile_status = true,
path = 2
}
},
lualine_x = {'lsp_status'},
lualine_y = {
{
'filetype', colored = false, icon_only = true
}
},
lualine_z = {'location'}
},
}