Neovim Setup for Nixi
Configure Neovim for Nixi development with LuaLS, autocompletion, and debugging.
Prerequisites
# Requirements
- Neovim 0.9+
- Lua Language Server (LuaLS)
- lazy.nvim (plugin manager)
LSP (Language Server)
Install via Lazy:
:add neovim/nvim-lspconfig
:add williamboman/mason.nvim
:add williamboman/mason-lspconfig.nvim
:add folke/neodev.nvim
Autocomplete
Install via Lazy:
:add hrsh7th/nvim-cmp
:add hrsh7th/cmp-nvim-lsp
:add hrsh7th/cmp-buffer
:add hrsh7th/cmp-path
:add L3MON4D3/LuaSnip
Telescope (Fuzzy Finder)
Install via Lazy:
:add nvim-lua/telescope.nvim
:add nvim-lua/plenary.nvim
Treesitter (Syntax)
Install via Lazy:
:add nvim-treesitter/nvim-treesitter
:TSUpdate
Debugging
Install via Lazy:
:add mfussenegger/nvim-dap
:add actboy168/luadev
File Explorer
Install via Lazy:
:add nvim-tree/nvim-tree.lua
Temporary Files
Install via Lazy:
:add folke/todo-comments.nvim
:add folke/trouble.nvim
Colorscheme
Install via Lazy:
:add folke/tokyonight.nvim
Complete Setup
Add this to your lua/plugins.lua:
return {
{ 'folke/lazy.nvim' },
{ 'neovim/nvim-lspconfig' },
{ 'williamboman/mason.nvim' },
{ 'williamboman/mason-lspconfig.nvim' },
{ 'folke/neodev.nvim' },
{ 'hrsh7th/nvim-cmp' },
{ 'hrsh7th/cmp-nvim-lsp' },
{ 'hrsh7th/cmp-buffer' },
{ 'hrsh7th/cmp-path' },
{ 'L3MON4D3/LuaSnip' },
{ 'nvim-lua/telescope.nvim' },
{ 'nvim-lua/plenary.nvim' },
{ 'nvim-treesitter/nvim-treesitter' },
{ 'mfussenegger/nvim-dap' },
{ 'actboy168/luadev' },
{ 'nvim-tree/nvim-tree.lua' },
{ 'folke/todo-comments.nvim' },
{ 'folke/trouble.nvim' },
{ 'folke/tokyonight.nvim' },
}
Lua LSP Config
Add to your init.lua:
local lspconfig = require('lspconfig')
lspconfig.lua_ls.setup({
settings = {
Lua = {
runtime = { version = 'Lua 5.4' },
diagnostics = { globals = {'vim', 'Nixi', 'nixi'} },
workspace = {
library = {
'${3rd}/luv/library',
'${3rd}/busted/library',
unpack({'src/nixi', 'src/nixi/?/init.lua'}),
},
},
},
},
})
Project Type Definitions
Create .luarc.json in project root:
{
"workspace.library": [
"src/nixi/types.lua",
"src/nixi/style.lua",
"src/nixi/htmx.lua",
"src/nixi/gtk.lua",
"src/nixi/anim.lua",
"src/nixi/router.lua",
"src/nixi/component.lua"
],
"runtime.version": "Lua 5.4",
"diagnostics.globals": ["Nixi", "nixi"]
}
Keymappings
Add to your init.lua:
local opts = { noremap = true, silent = true }
-- Run
vim.keymap.set('n', 'r', ':!lua %', opts)
vim.keymap.set('n', 's', ':!lua server.lua', opts)
-- LSP
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts)
vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts)
vim.keymap.set('n', 'rn', vim.lsp.buf.rename, opts)
-- Telescope
vim.keymap.set('n', 'ff', require('telescope.builtin').find_files, opts)
vim.keymap.set('n', 'fg', require('telescope.builtin').live_grep, opts)