{  ... }:
{
  programs.nixvim = {
    plugins = {
      blink-cmp = {
        enable = true;

        settings = {
          fuzzy.prebuilt_binaries = {
            download = false;
            ignore_version_mismatch = true;
          };

          keymap = {
            preset = "enter";
          };

          signature = {
            # handled by noice
            enabled = false;
          };

          sources = {
            default = [
              "lsp"
              "path"
              "snippets"
              "buffer"
              "cmp_yanky"
              "copilot"
              "emoji"
              "lazydev"
              "codecompanion"
              "dictionary"
            ];

            providers = {
              copilot = {
                name = "Copilot";
                async = true;
                module = "blink-cmp-copilot";
                score_offset = 50;
                opts = {
                  max_completions = 2;
                  max_attemps = 3;
                };
              };

              cmp_yanky = {
                async = true;
                name = "cmp_yanky";
                module = "blink.compat.source";
                score_offset = -5;
              };

              emoji = {
                module = "blink-emoji";
                name = "Emoji";
                score_offset = -10;
                opts = {
                  insert = true;
                };
              };

              codecompanion = {
                name = "CodeCompanion";
                module = "codecompanion.providers.completion.blink";
              };

              dictionary = {
                module = "blink-cmp-dictionary";
                name = "Dict";
                score_offset = -15;
                min_keyword_length = 3;
                opts = {
                  dictionary_directories = {
                    __unkeyed-1.__raw = ''vim.fn.expand("/etc/dictionaries/")'';
                  };
                };
              };

              lazydev = {
                name = "LazyDev";
                module = "lazydev.integrations.blink";
                score_offset = 100;
              };

              lsp = {
                async = true;
                score_offset = 60;
              };
            };
          };

          appearance = {
            kind_icons = {
              Copilot = "";
              cmp_yanky = "⧉";
              emoji = "";
            };
            use_nvim_cmp_as_default = false;
          };

          completion = {
            accept = {
              auto_brackets = {
                enabled = false;
              };
            };

            list = {
              selection = {
                preselect.__raw = ''
                  function(ctx)
                    return ctx.mode ~= 'cmdline' and not require('blink.cmp').snippet_active({ direction = 1 })
                  end
                '';
                auto_insert = false;
              };
            };

            documentation = {
              auto_show = true;
              auto_show_delay_ms = 500;
              treesitter_highlighting = true;
            };

            menu = {
              auto_show = true;

              draw = {
                treesitter = ["lsp"];
              };
            };
          };

          snippets = {
            preset = "luasnip";
            expand.__raw = ''
              function(snippet) require('luasnip').lsp_expand(snippet) end
            '';
            active.__raw = ''
              function(filter)
                if filter and filter.direction then
                  return require('luasnip').jumpable(filter.direction)
                end
                return require('luasnip').in_snippet()
              end
            '';
            jump.__raw = ''
              function(direction) require('luasnip').jump(direction) end
            '';
          };
        };
      };

      blink-compat = {
        enable = true;
      };
    };

    extraConfigLua = ''
      vim.api.nvim_set_hl(0, 'BlinkCmpKindDict', { default = false, fg = '#a6e3a1' })
    '';
  };
}