Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 8 additions & 7 deletions nvim/init.lua
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
require("main")

-- DEPENDENCIES
-- neovim
-- vimplug
-- neovim >= 0.8.0
-- python3
-- cargo
-- flake8
-- black
-- Node.js (for some LSP servers)
-- pip

-- INSTALL
-- sudo pacman -S neovim python flake8 python-pip (arch)
-- sudo apt install neovim python3 flake8 python3-pip (debian)
-- sudo pacman -S neovim python nodejs npm (arch)
-- sudo apt install neovim python3 nodejs npm python3-pip (debian)
-- pip3 install --user black neovim
-- curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
-- export PATH=$PATH:$HOME/.local/bin:$HOME/.cargo/bin
-- rustup component add rust-analyzer
-- rustup component add rust-analyzer rustfmt clippy
-- cargo install tree-sitter-cli
-- git clone --depth=1 https://github.com/iinc0gnit0/dotfiles
-- mkdir ~/.config
-- cp -r dotfiles/nvim ~/.config
-- Open neovim and run :PackerSync to install plugins
-- LSP servers and formatters will be installed automatically via Mason
33 changes: 0 additions & 33 deletions nvim/lua/main/configs/ale.lua

This file was deleted.

183 changes: 183 additions & 0 deletions nvim/lua/main/configs/lsp.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
-- Mason setup for managing LSP servers
require("mason").setup()
require("mason-lspconfig").setup({
ensure_installed = {
"rust_analyzer",
"pyright",
"clangd",
"ts_ls",
"eslint",
"terraformls",
},
automatic_installation = true,
})

-- Completion setup
local cmp = require("cmp")
local luasnip = require("luasnip")

cmp.setup({
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end,
},
mapping = cmp.mapping.preset.insert({
['<C-b>'] = cmp.mapping.scroll_docs(-4),
['<C-f>'] = cmp.mapping.scroll_docs(4),
['<C-Space>'] = cmp.mapping.complete(),
['<C-e>'] = cmp.mapping.abort(),
['<CR>'] = cmp.mapping.confirm({ select = true }),
['<Tab>'] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item()
elseif luasnip.expand_or_jumpable() then
luasnip.expand_or_jump()
else
fallback()
end
end, { 'i', 's' }),
['<S-Tab>'] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_prev_item()
elseif luasnip.jumpable(-1) then
luasnip.jump(-1)
else
fallback()
end
end, { 'i', 's' }),
}),
sources = cmp.config.sources({
{ name = 'nvim_lsp' },
{ name = 'luasnip' },
}, {
{ name = 'buffer' },
{ name = 'path' },
})
})

-- LSP capabilities for autocompletion
local capabilities = require('cmp_nvim_lsp').default_capabilities()

-- LSP keybindings
local on_attach = function(client, bufnr)
local opts = { buffer = bufnr, noremap = true, silent = true }

-- Keybindings
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts)
vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, opts)
vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, opts)
vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts)
vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts)
vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, opts)
vim.keymap.set('n', '<leader>rn', vim.lsp.buf.rename, opts)
vim.keymap.set('n', '<leader>ca', vim.lsp.buf.code_action, opts)
vim.keymap.set('n', '<leader>f', function() vim.lsp.buf.format({ async = true }) end, opts)
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, opts)
vim.keymap.set('n', ']d', vim.diagnostic.goto_next, opts)
vim.keymap.set('n', '<leader>e', vim.diagnostic.open_float, opts)
vim.keymap.set('n', '<leader>q', vim.diagnostic.setloclist, opts)
end

-- Configure diagnostics
vim.diagnostic.config({
virtual_text = true,
signs = true,
update_in_insert = false,
underline = true,
severity_sort = true,
float = {
border = 'rounded',
source = 'always',
},
})

-- Diagnostic signs
local signs = { Error = "✘", Warn = "▲", Hint = "⚑", Info = "»" }
for type, icon in pairs(signs) do
local hl = "DiagnosticSign" .. type
vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = hl })
end

-- LSP server configurations
local lspconfig = require("lspconfig")

-- Rust
lspconfig.rust_analyzer.setup({
on_attach = on_attach,
capabilities = capabilities,
settings = {
['rust-analyzer'] = {
cargo = {
allFeatures = true,
},
checkOnSave = {
command = "clippy",
},
},
},
})

-- Python
lspconfig.pyright.setup({
on_attach = on_attach,
capabilities = capabilities,
})

-- C/C++
lspconfig.clangd.setup({
on_attach = on_attach,
capabilities = capabilities,
})

-- TypeScript/JavaScript
lspconfig.ts_ls.setup({
on_attach = on_attach,
capabilities = capabilities,
})

-- ESLint
lspconfig.eslint.setup({
on_attach = function(client, bufnr)
on_attach(client, bufnr)
-- Auto-fix on save
vim.api.nvim_create_autocmd("BufWritePre", {
buffer = bufnr,
command = "EslintFixAll",
})
end,
capabilities = capabilities,
})

-- Terraform
lspconfig.terraformls.setup({
on_attach = on_attach,
capabilities = capabilities,
})

-- Formatting setup with conform.nvim
require("conform").setup({
formatters_by_ft = {
rust = { "rustfmt" },
python = { "black" },
javascript = { "eslint_d" },
javascriptreact = { "eslint_d" },
typescript = { "eslint_d" },
typescriptreact = { "eslint_d" },
cpp = { "clang_format" },
c = { "clang_format" },
terraform = { "terraform_fmt" },
},
format_on_save = {
timeout_ms = 500,
lsp_fallback = true,
},
})

-- Also format on save for all files (trim whitespace, etc)
vim.api.nvim_create_autocmd("BufWritePre", {
pattern = "*",
callback = function(args)
require("conform").format({ bufnr = args.buf })
end,
})
2 changes: 1 addition & 1 deletion nvim/lua/main/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ require("main.packer")
require("main.set")
require("main.autocmd")
require("main.configs.ts")
require("main.configs.ale")
require("main.configs.lsp")
require("main.configs.gruvbox")
require("main.configs.lualine")
require("main.configs.indent-blankline")
Expand Down
18 changes: 17 additions & 1 deletion nvim/lua/main/packer.lua
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,23 @@ require("packer").startup(function(use)
"nvim-treesitter/nvim-treesitter",
run = ":TSUpdate"
})
use("dense-analysis/ale")

-- LSP Support
use("neovim/nvim-lspconfig")
use("williamboman/mason.nvim")
use("williamboman/mason-lspconfig.nvim")

-- Autocompletion
use("hrsh7th/nvim-cmp")
use("hrsh7th/cmp-nvim-lsp")
use("hrsh7th/cmp-buffer")
use("hrsh7th/cmp-path")
use("L3MON4D3/LuaSnip")
use("saadparwaiz1/cmp_luasnip")

-- Formatting
use("stevearc/conform.nvim")

use({
"ellisonleao/gruvbox.nvim",
as = "gruvbox"
Expand Down