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)