{ config, lib, ... }: with lib; { options.kat.neovim = { enable = mkEnableOption "neovim configuration" // { default = true; }; lsp = mkEnableOption "neovim LSPs"; }; config = mkIf config.kat.neovim.enable { programs.nixvim = { 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; }; 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; lsp = mkIf config.kat.neovim.lsp { enable = true; keymaps = { diagnostic = { "lj" = "goto_next"; "lk" = "goto_prev"; }; lspBuf = { K = "hover"; lgD = "references"; lgd = "definition"; lgi = "implementation"; lgt = "type_definition"; la = "code_action"; ls = "signature_help"; }; 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; }; }; }; }; }; }; }