{ config, pkgs, ... }: { programs.neovim = { enable = true; viAlias = true; vimAlias = true; defaultEditor = true; extraPackages = with pkgs; [ jdtls jdk ]; initLua = '' vim.opt.number = true vim.opt.relativenumber = true vim.opt.tabstop = 2 vim.opt.softtabstop = 2 vim.opt.expandtab = true vim.opt.shiftwidth = 2 vim.opt.smartindent = true vim.opt.wrap = false vim.opt.swapfile = false vim.opt.backup = false vim.opt.undofile = false vim.opt.hlsearch = false vim.opt.incsearch = true vim.opt.termguicolors = true vim.opt.clipboard = "unnamedplus" vim.opt.scrolloff = 999 vim.opt.updatetime = 50 vim.opt.foldmethod = "indent" vim.opt.foldlevel = 99 vim.g.mapleader = " " vim.keymap.set("n", "", ":") vim.keymap.set("n", "w", "w", { silent = true }) vim.keymap.set("n", "q", "q", { silent = true }) vim.keymap.set("n", "wq", "wq", { silent = true }) vim.keymap.set("n", "x", "!chmod +x %", { silent = true }) vim.keymap.set("n", "Q", "") vim.keymap.set("n", "o", "o") vim.keymap.set("n", "O", "O") vim.keymap.set("i", "jj", "") local is_dark = vim.o.background ~= "light" require("cyberdream").setup({ transparent = is_dark, variant = is_dark and "dark" or "light", terminal_colors = true, }) vim.cmd.colorscheme("cyberdream") require("nvim-tree").setup({ view = { width = 30 }, renderer = { group_empty = true }, filters = { dotfiles = false }, }) require("bufferline").setup({ options = { offsets = { { filetype = "NvimTree", text = "Files", highlight = "Directory", separator = true, }, }, }, }) require("lualine").setup({ ons = { theme = "auto" }, }) require("neocord").setup({ logo = "auto", logo_tooltip = "Neovim", main_image = "language", show_time = true, global_timer = true, }) require("gitsigns").setup({ signs = { add = { text = "+" }, change = { text = "~" }, delete = { text = "_" }, }, }) local lspconfig = require('lspconfig') -- Common keymaps to run when the Eclipse LSP attaches to a Java buffer local on_attach = function(client, bufnr) local opts = { buffer = bufnr, silent = true } -- Eclipse IDE core features mapped to Neovim actions vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, opts) vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts) vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts) vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, opts) vim.keymap.set('n', '', vim.lsp.buf.signature_help, opts) vim.keymap.set('n', 'rn', vim.lsp.buf.rename, opts) vim.keymap.set('n', 'ca', vim.lsp.buf.code_action, opts) vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts) vim.keymap.set('n', 'f', function() vim.lsp.buf.format { async = true } end, opts) end -- Initialize the Eclipse JDTLS Server configuration -- NixOS patches 'jdtls' wrapper script automatically to point to the correct binary paths lspconfig.jdtls.setup({ on_attach = on_attach, cmd = { "jdtls" }, root_dir = lspconfig.util.root_pattern(".git", "pom.xml", "build.gradle"), }) ''; plugins = with pkgs.vimPlugins; [ { plugin = cyberdream-nvim; } { plugin = nvim-web-devicons; } { plugin = nvim-tree-lua; } { plugin = bufferline-nvim; } { plugin = lualine-nvim; } { plugin = neocord; } { plugin = gitsigns-nvim; } { plugin = nvim-lspconfig; } ]; }; }