{ pkgs, ... }: { programs.neovim = { enable = true; defaultEditor = true; extraLuaPackages = ps: [ ps.magick ]; extraPackages = [ pkgs.ueberzugpp pkgs.imagemagick ]; plugins = with pkgs.vimPlugins; [ neo-tree-nvim catppuccin-nvim tokyonight-nvim nvim-lspconfig nvim-cmp cmp-nvim-lsp cmp-buffer cmp-path plenary-nvim telescope-nvim (nvim-treesitter.withAllGrammars) vim-nix lualine-nvim image-nvim ]; extraLuaConfig = '' vim.cmd("colorscheme catppuccin-mocha") -- Basic settings vim.o.number = true vim.o.relativenumber = true -- ========================= -- LSP (Neovim 0.11+ way) -- ========================= -- Add cmp capabilities local capabilities = require("cmp_nvim_lsp").default_capabilities() vim.lsp.config("nil_ls", { capabilities = capabilities, }) -- PHP LSP vim.lsp.config("intelephense", { capabilities = capabilities, }) vim.lsp.enable("intelephense") vim.lsp.enable("nil_ls") -- ========================= -- nvim-cmp -- ========================= local cmp = require("cmp") cmp.setup({ mapping = cmp.mapping.preset.insert({ [""] = cmp.mapping.complete(), [""] = cmp.mapping.confirm({ select = true }), }), sources = { { name = "nvim_lsp" }, { name = "buffer" }, { name = "path" }, } }) -- ========================= -- Telescope -- ========================= local builtin = require("telescope.builtin") vim.keymap.set("n", "ff", builtin.find_files, {}) vim.keymap.set("n", "fg", builtin.live_grep, {}) -- ========================= -- Lualine (status line with Git branch) -- ========================= require('lualine').setup { options = { theme = 'catppuccin', -- match your colorscheme section_separators = {'', ''}, component_separators = {'', ''}, }, sections = { lualine_a = {'mode'}, lualine_b = {'branch'}, -- shows Git branch here lualine_c = {'filename'}, lualine_x = {'encoding', 'fileformat', 'filetype'}, lualine_y = {'progress'}, lualine_z = {'location'} } } -- ========================= -- image-nvim -- ========================= require("image").setup({ backend = "ueberzug", -- or "ueberzug" or "sixel" processor = "magick_cli", -- or "magick_rock" integrations = { markdown = { enabled = true, clear_in_insert_mode = false, download_remote_images = true, only_render_image_at_cursor = false, only_render_image_at_cursor_mode = "popup", -- or "inline" floating_windows = false, -- if true, images will be rendered in floating markdown windows filetypes = { "markdown", "vimwiki" }, -- markdown extensions (ie. quarto) can go here }, asciidoc = { enabled = true, clear_in_insert_mode = false, download_remote_images = true, only_render_image_at_cursor = false, only_render_image_at_cursor_mode = "popup", floating_windows = false, filetypes = { "asciidoc", "adoc" }, }, neorg = { enabled = true, filetypes = { "norg" }, }, rst = { enabled = true, }, typst = { enabled = true, filetypes = { "typst" }, }, html = { enabled = false, }, css = { enabled = false, }, }, max_width = nil, max_height = nil, max_width_window_percentage = nil, max_height_window_percentage = 50, scale_factor = 1.0, window_overlap_clear_enabled = false, -- toggles images when windows are overlapped window_overlap_clear_ft_ignore = { "cmp_menu", "cmp_docs", "snacks_notif", "scrollview", "scrollview_sign" }, editor_only_render_when_focused = false, -- auto show/hide images when the editor gains/looses focus tmux_show_only_in_active_window = false, -- auto show/hide images in the correct Tmux window (needs visual-activity off) hijack_file_patterns = { "*.png", "*.jpg", "*.jpeg", "*.gif", "*.webp", "*.avif" }, -- render image files as images when opened }) ''; }; }