{ pkgs, ... }: { enable = true; defaultEditor = true; enableMan = true; package = pkgs.unstable.neovim-unwrapped; extraConfigLua = '' 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''; diagnostics = { virtual_text = { prefix = "󰬨"; }; }; opts = { mouse = "a"; number = true; softtabstop = 0; expandtab = false; tabstop = 2; shiftwidth = 2; smartindent = true; list = true; listchars = { tab = "> "; eol = "¬"; trail = "·"; nbsp = "•"; }; splitright = true; splitbelow = true; showcmd = true; wildmenu = true; hlsearch = true; autoread = true; swapfile = false; }; clipboard = { register = "unnamedplus"; providers.wl-copy.enable = true; }; colorschemes.base16 = { enable = true; colorscheme = "gruvbox-dark-pale"; }; plugins = { nvim-tree = { enable = true; autoClose = true; disableNetrw = true; hijackCursor = true; }; telescope = { enable = true; }; lualine = { enable = true; }; treesitter = { enable = true; settings = { auto_install = true; highlight = { additional_vim_regex_highlighting = true; enable = true; }; incremental_selection = { enable = true; keymaps = { init_selection = false; node_decremental = "grm"; node_incremental = "grn"; scope_incremental = "grc"; }; }; indent = { enable = true; }; sync_install = false; }; }; luasnip = { enable = true; }; friendly-snippets = { enable = true; }; cmp = { enable = true; autoEnableSources = true; settings = { mapping = { "" = "cmp.mapping.scroll_docs(-4)"; "" = "cmp.mapping.scroll_docs(4)"; "" = "cmp.mapping.complete()"; "" = "cmp.mapping.abort()"; "" = "cmp.mapping.confirm({ select = true })"; "" = '' cmp.mapping(function(fallback) if cmp.visible() then cmp.select_next_item() else fallback() end end, { "i", "s" }) ''; "" = '' cmp.mapping(function(fallback) if cmp.visible() then cmp.select_prev_item() else fallback() end end, { "i", "s" }) ''; }; snippet = { expand = "function(args) require('luasnip').lsp_expand(args.body) end"; }; sources = [ { name = "nvim_lsp"; } { name = "luasnip"; } { name = "path"; } { name = "buffer"; } ]; }; }; lsp = { enable = true; servers = { bashls = { enable = true; package = pkgs.unstable.bash-language-server; }; clangd.enable = true; nixd = { enable = true; settings.formatting.command = [ "nixfmt" ]; }; rust-analyzer = { enable = true; installCargo = true; installRustc = true; }; pyright.enable = true; ocamllsp.enable = true; }; keymaps.lspBuf = { "gd" = "definition"; "gD" = "references"; "gt" = "type_definition"; "gi" = "implementation"; "K" = "hover"; "rn" = "rename"; "ca" = "code_action"; "f" = "format"; }; }; lsp-format = { enable = true; }; }; globals = { mapleader = ","; }; keymaps = [ { key = "tf"; action = "NvimTreeToggle"; mode = "n"; } { key = "f"; action = "lua require('telescope.builtin').find_files()"; mode = "n"; } { key = "d"; action = "lua vim.diagnostic.open_float()"; mode = "n"; } ]; }