{ config, ... }: { programs.nixvim.plugins = if config.nixvim-config.enable-ai then { ## required dependencies dressing.enable = true; # this is archived and may break in the future nui.enable = true; ## optional dependencies cmp.enable = true; copilot-lua.enable = true; fzf-lua.enable = true; mini.enable = true; telescope.enable = true; web-devicons.enable = true; avante = { enable = true; settings = { provider = "copilot"; cursor_applying_provider = "copilot"; behaviour = { enable_cursor_planning_mode = true; }; web_search_engine = { provider = "tavily"; # tavily, serpapi, searchapi, google, kagi }; # depends on docker rag_service = { enable = false; # requires OPENAI_API_KEY to be set }; files = { auto_include = true; # Automatically include relevant files max_files = 50; # Maximum number of files to include in context max_size_kb = 1000; # Maximum total size of files in KB # Define which files to include/exclude include = [ "*.lua" "*.nix" "*.rs" "*.ts" "*.js" "*.jsx" "*.tsx" # Add more patterns as needed ]; exclude = [ "node_modules/**" "dist/**" ".git/**" # Add more patterns to exclude ]; }; claude = { api_key_name = "<api_key_name>"; }; openai = { api_key_name = "<api_key_name>"; }; vendors = { ollama = { api_key_name = ""; endpoint = "http://localhost:11434/v1"; model = "hf.co/unsloth/DeepSeek-R1-Distill-Qwen-1.5B-GGUF"; temperature = "0.6"; parse_curl_args.__raw = '' function(opts, code_opts) return { url = opts.endpoint .. "/chat/completions", headers = { ["Accept"] = "application/json", ["Content-Type"] = "application/json", ["x-api-key"] = "ollama", }, body = { model = opts.model, messages = require("avante.providers").copilot.parse_messages(code_opts), max_tokens = opts.max_tokens, stream = true, }, } end''; parse_response_data.__raw = '' function(data_stream, event_state, opts) require("avante.providers").openai.parse_response(data_stream, event_state, opts) end''; }; }; ## Default keybindings: # <leader>aa - ask # <leader>ae - edit # <leader>ar - refresh # <leader>af - focus # co - choose ours # ct - choose theirs # ca - choose all theirs # c0 - choose none # cb - choose both # cc - choose cursor # ]x - previous conflict # [x - next conflict # [[ - previous code block # ]] - next code block # mappings = { # ask = "<leader>ca"; # edit = "<leader>ce"; # refresh = "<leader>cr"; # focus = "<leader>cf"; # toggle = { # default = "<leader>ct"; # debug = "<leader>cd"; # hint = "<leader>ch"; # suggestion = "<leader>cs"; # repomap = "<leader>cR"; # }; # files = { # add_current = "<leader>cc"; # }; # }; }; }; } else {}; }