{ config, lib, ... }: with lib; let basecfg = { enable = true; defaultEditor = true; vimdiffAlias = true; vimAlias = true; viAlias = true; colorschemes.dracula-nvim = { enable = true; settings = { colors = { bg = "#000000"; black = "#000000"; }; transparent_bg = true; overrides.__raw = '' function (colors) return { LineNr = { bg = "#181818", fg = colors.purple }, CursorLine = { }, CursorLineNr = { fg = "#FFFF00", bg = colors.black, bold = true }, StatusLine = { fg = colors.bright_white, bg = colors.black }, } end ''; }; }; opts = { foldlevelstart = 99; number = true; relativenumber = true; cursorline = true; tabstop = 2; shiftwidth = 2; expandtab = true; }; globals.mapleader = ","; autoCmd = [ { command = "set relativenumber"; event = [ "InsertLeave" ]; } { command = "set norelativenumber"; event = [ "InsertEnter" ]; } ]; keymaps = [ { action = ":set number!"; key = ""; } { action = ":set relativenumber!"; key = ""; } { action = ''"*ygv''; key = ""; mode = [ "v" ]; } ]; plugins = { nix.enable = true; treesitter = { enable = true; folding = true; settings.highlight.enable = true; }; telescope = { enable = true; keymaps = { "ff".action = "find_files"; "fg".action = "live_grep"; "fb".action = "buffers"; }; settings.pickers.buffers.mappings = rec { i."".__raw = "require('telescope.actions').delete_buffer"; n = i; }; }; web-devicons.enable = true; which-key = { enable = true; settings.triggers = [ { __unkeyed-1 = ""; mode = "nxsot"; } { __unkeyed-1 = "f"; mode = "nxsot"; } ]; }; todo-comments = { enable = true; keymaps.todoTelescope.key = "ft"; }; markview.enable = true; nvim-surround.enable = true; }; }; adv-editor = { plugins = { which-key.settings.spec = [ { __unkeyed = "l"; desc = "Lsp keymaps"; } { __unkeyed = "lK"; desc = "Hover information"; } { __unkeyed = "la"; desc = "Apply code action"; } { __unkeyed = "ls"; desc = "Show signature help"; } { __unkeyed = "lg"; desc = "Go to"; } { __unkeyed = "lgD"; desc = "References"; } { __unkeyed = "lgd"; desc = "Definition"; } { __unkeyed = "lgi"; desc = "Implementation"; } { __unkeyed = "lgt"; desc = "Type definition"; } ]; lsp-lines.enable = true; lsp = { enable = true; keymaps = { diagnostic = { "lj" = "goto_next"; "lk" = "goto_prev"; }; lspBuf = { "lK" = "hover"; "la" = "code_action"; "ls" = "signature_help"; "lgD" = "references"; "lgd" = "definition"; "lgi" = "implementation"; "lgt" = "type_definition"; }; extra = [ { action = "LspStop"; key = "lx"; } { action = "LspStart"; key = "ls"; } { action = "LspRestart"; key = "lr"; } ]; }; servers = { nixd.enable = true; pylsp.enable = true; clangd.enable = true; ltex.enable = true; rust_analyzer = { enable = true; installCargo = true; installRustc = true; }; }; }; }; }; in { options.kat.neovim = { enable = mkEnableOption "neovim configuration" // { default = true; }; lsp = mkEnableOption "neovim LSPs"; }; config = mkIf config.kat.neovim.enable { programs.nixvim = mkMerge [ basecfg (mkIf config.kat.neovim.lsp adv-editor) ]; }; }