{ pkgs, config, lib, ... }: with lib; with builtins; let cfg = config.vim.assistant.copilot; keyOrFalse = key: if key != null then "'${key}'" else "false"; in { config = mkIf cfg.enable { vim.startPlugins = [ "copilot-lua" pkgs.nodejs-slim-16_x ]; vim.luaConfigRC.copilot = nvim.dag.entryAnywhere '' require("copilot").setup({ -- available options: https://github.com/zbirenbaum/copilot.lua copilot_node_command = "${cfg.copilot_node_command}", panel = { keymap = { jump_prev = ${keyOrFalse cfg.mappings.panel.jumpPrev}, jump_next = ${keyOrFalse cfg.mappings.panel.jumpNext}, accept = ${keyOrFalse cfg.mappings.panel.accept}, refresh = ${keyOrFalse cfg.mappings.panel.refresh}, open = ${keyOrFalse cfg.mappings.panel.open}, }, }, suggestion = { keymap = { accept = ${keyOrFalse cfg.mappings.suggestion.accept}, accept_word = ${keyOrFalse cfg.mappings.suggestion.acceptWord}, accept_line = ${keyOrFalse cfg.mappings.suggestion.acceptLine}, next = ${keyOrFalse cfg.mappings.suggestion.next}, prev = ${keyOrFalse cfg.mappings.suggestion.prev}, dismiss = ${keyOrFalse cfg.mappings.suggestion.dismiss}, }, }, }) ''; }; }