Files
dotfiles/.config/nvim/init.lua
2025-08-12 10:41:58 -07:00

187 lines
3.9 KiB
Lua

local lazypath = vim.fn.stdpath("data") .. "/site/pack/packer/start/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
vim.fn.system({
"git",
"clone",
"https://github.com/folke/lazy.nvim.git",
lazypath,
})
end
vim.opt.rtp:prepend(lazypath)
require("lazy").setup({
{
"windwp/nvim-autopairs",
event = "InsertEnter",
config = function()
require("nvim-autopairs").setup({})
end,
},
{
"nvim-treesitter/nvim-treesitter",
build = ":TSUpdate",
lazy = false,
},
{
"rose-pine/neovim",
name = "rose-pine",
config = function()
vim.cmd("colorscheme rose-pine")
end,
},
{
"stevearc/conform.nvim",
opts = {},
},
{
"stevearc/oil.nvim",
opts = {},
},
{
"numToStr/Comment.nvim",
opts = {},
lazy = false,
},
{
"folke/which-key.nvim",
event = "VeryLazy",
init = function()
vim.o.timeout = true
vim.o.timeoutlen = 300
end,
opts = {
preset = "helix",
},
},
{
"kylechui/nvim-surround",
version = "main",
event = "VeryLazy",
config = function()
require("nvim-surround").setup({})
end,
},
{ "lewis6991/gitsigns.nvim" },
{ "neovim/nvim-lspconfig" },
{ "hrsh7th/nvim-cmp" },
{ "hrsh7th/cmp-nvim-lsp" },
{ "hrsh7th/cmp-buffer" },
{ "hrsh7th/cmp-path" },
{ "saadparwaiz1/cmp_luasnip" },
{ "L3MON4D3/LuaSnip" },
{ "rafamadriz/friendly-snippets" },
})
local cmp = require("cmp")
cmp.setup({
snippet = {
expand = function(args)
require("luasnip").lsp_expand(args.body) -- Use LuaSnip for snippets
end,
},
mapping = {
["<S-Tab>"] = cmp.mapping.select_prev_item(),
["<Tab>"] = cmp.mapping.select_next_item(),
["<C-d>"] = cmp.mapping.scroll_docs(-4),
["<C-f>"] = cmp.mapping.scroll_docs(4),
-- ["<C-Space>"] = cmp.mapping.complete(),
["<C-Space>"] = cmp.mapping.close(),
["<CR>"] = cmp.mapping.confirm({ select = true }),
},
sources = {
{ name = "nvim_lsp" }, -- LSP completion
{ name = "buffer" }, -- Buffer completion
{ name = "path" }, -- Path completion
{ name = "luasnip" }, -- Snippet completion
},
})
require("nvim-treesitter.configs").setup({
ensure_installed = { "go", "html", "css", "javascript", "hyprlang", "sql", "gomod", "gosum", "bash", "c", "rust" },
highlight = {
enable = true,
},
})
-- nvim-lspconfig - Providing basic, default Nvim LSP client configurations for various LSP servers.
local lspconfig = require("lspconfig")
lspconfig.pyright.setup({})
lspconfig.ts_ls.setup({})
lspconfig.gopls.setup({})
lspconfig.bashls.setup({})
local luasnip = require("luasnip")
require("luasnip.loaders.from_vscode").lazy_load()
require("luasnip").config.set_config({
history = true,
updateevents = "TextChanged,TextChangedI",
})
-- native vim options
local vim = vim
local opt = vim.opt
opt.foldmethod = "expr"
opt.foldexpr = "nvim_treesitter#foldexpr()"
vim.wo.number = true
vim.wo.relativenumber = true
opt.tabstop = 2
opt.shiftwidth = 2
opt.expandtab = true
vim.keymap.set("ca", "o", "tabnew")
-- Comment.vim - Smart and Powerful commenting plugin for neovim
require("Comment").setup()
-- conform.nvim - Lightweight yet powerful formatter plugin for neovim
require("conform").setup({
formatters_by_ft = {
lua = { "stylua" },
python = { "isort", "black" },
rust = { "rustfmt" },
javascript = { "prettier" },
html = { "prettier" },
go = { "gofmt" },
bash = { "shfmt" },
},
format_on_save = {
timeout_ms = 500,
lsp_format = "fallback",
},
})
-- Hyprlang LSP
vim.api.nvim_create_autocmd({ "BufEnter", "BufWinEnter" }, {
pattern = { "*.hl", "hypr*.conf" },
callback = function(event)
vim.lsp.start({
name = "hyprlang",
cmd = { "hyprls" },
root_dir = vim.fn.getcwd(),
})
end,
})
-- enable diagnostics
vim.diagnostic.config({
virtual_text = {
prefix = "",
},
severity_sort = true,
float = {
source = "always",
},
})
-- save and format on insertleave
vim.api.nvim_create_autocmd({ "InsertLeave", "FocusLost" }, {
pattern = "*",
callback = function()
require("conform").format()
vim.cmd("silent! write")
end,
})