diff options
| author | Mike Vink <mike@pionative.com> | 2025-01-19 13:52:52 +0100 |
|---|---|---|
| committer | Mike Vink <mike@pionative.com> | 2025-01-19 13:52:52 +0100 |
| commit | b77413ff8f59f380612074f0c9bd49093d8db695 (patch) | |
| tree | 32c39a811ba96ed4ab0a1c81cce9f8d518ed7e31 /docs/installation.md | |
Squashed 'mut/neovim/pack/plugins/start/blink.cmp/' content from commit 1cc3b1a
git-subtree-dir: mut/neovim/pack/plugins/start/blink.cmp
git-subtree-split: 1cc3b1a908fbcfd15451c4772759549724f38524
Diffstat (limited to 'docs/installation.md')
| -rw-r--r-- | docs/installation.md | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/docs/installation.md b/docs/installation.md new file mode 100644 index 0000000..3a82c6f --- /dev/null +++ b/docs/installation.md @@ -0,0 +1,135 @@ +# Installation + +> [!IMPORTANT] +> Blink uses a prebuilt binary for the fuzzy matcher which will be downloaded automatically when on a tag. +> You may build from source with rust nightly. See the [fuzzy documentation](./configuration/fuzzy.md) for more information. + +## Requirements + +- Neovim 0.10+ +- Using prebuilt binaries: + - curl + - git +- Building from source: + - Rust nightly or [rustup](https://rustup.rs/) + +## `lazy.nvim` + +```lua +{ + 'saghen/blink.cmp', + -- optional: provides snippets for the snippet source + dependencies = 'rafamadriz/friendly-snippets', + + -- use a release tag to download pre-built binaries + version = '*', + -- AND/OR build from source, requires nightly: https://rust-lang.github.io/rustup/concepts/channels.html#working-with-nightly-rust + -- build = 'cargo build --release', + -- If you use nix, you can build from source using latest nightly rust with: + -- build = 'nix run .#build-plugin', + + ---@module 'blink.cmp' + ---@type blink.cmp.Config + opts = { + -- 'default' for mappings similar to built-in completion + -- 'super-tab' for mappings similar to vscode (tab to accept, arrow keys to navigate) + -- 'enter' for mappings similar to 'super-tab' but with 'enter' to accept + -- See the full "keymap" documentation for information on defining your own keymap. + keymap = { preset = 'default' }, + + appearance = { + -- Sets the fallback highlight groups to nvim-cmp's highlight groups + -- Useful for when your theme doesn't support blink.cmp + -- Will be removed in a future release + use_nvim_cmp_as_default = true, + -- Set to 'mono' for 'Nerd Font Mono' or 'normal' for 'Nerd Font' + -- Adjusts spacing to ensure icons are aligned + nerd_font_variant = 'mono' + }, + + -- Default list of enabled providers defined so that you can extend it + -- elsewhere in your config, without redefining it, due to `opts_extend` + sources = { + default = { 'lsp', 'path', 'snippets', 'buffer' }, + }, + }, + opts_extend = { "sources.default" } +} +``` + +> [!IMPORTANT] +> On Neovim 0.11+ and Blink.cmp 0.10+, you may skip this step + +Setting capabilities for `nvim-lspconfig`: + +```lua +-- LSP servers and clients communicate which features they support through "capabilities". +-- By default, Neovim supports a subset of the LSP specification. +-- With blink.cmp, Neovim has *more* capabilities which are communicated to the LSP servers. +-- Explanation from TJ: https://youtu.be/m8C0Cq9Uv9o?t=1275 +-- +-- This can vary by config, but in general for nvim-lspconfig: + +{ + 'neovim/nvim-lspconfig', + dependencies = { 'saghen/blink.cmp' }, + + -- example using `opts` for defining servers + opts = { + servers = { + lua_ls = {} + } + }, + config = function(_, opts) + local lspconfig = require('lspconfig') + for server, config in pairs(opts.servers) do + -- passing config.capabilities to blink.cmp merges with the capabilities in your + -- `opts[server].capabilities, if you've defined it + config.capabilities = require('blink.cmp').get_lsp_capabilities(config.capabilities) + lspconfig[server].setup(config) + end + end + + -- example calling setup directly for each LSP + config = function() + local capabilities = require('blink.cmp').get_lsp_capabilities() + local lspconfig = require('lspconfig') + + lspconfig['lua-ls'].setup({ capabilities = capabilities }) + end +} +``` + +## `mini.deps` + +The following section includes only the installation and, optionally, building of the fuzzy matcher. Check the [lazy.nvim](#lazy.nvim) section for recommended configuration options and setting up `nvim-lspconfig`. + +```lua +-- use a release tag to download pre-built binaries +MiniDeps.add({ + source = "saghen/blink.cmp", + depends = { + "rafamadriz/friendly-snippets", + }, + checkout = "some.version", -- check releases for latest tag +}) + +-- OR build from source, requires nightly: https://rust-lang.github.io/rustup/concepts/channels.html#working-with-nightly-rust +local function build_blink(params) + vim.notify('Building blink.cmp', vim.log.levels.INFO) + local obj = vim.system({ 'cargo', 'build', '--release' }, { cwd = params.path }):wait() + if obj.code == 0 then + vim.notify('Building blink.cmp done', vim.log.levels.INFO) + else + vim.notify('Building blink.cmp failed', vim.log.levels.ERROR) + end +end + +MiniDeps.add({ + source = 'Saghen/blink.cmp', + hooks = { + post_install = build_blink, + post_checkout = build_blink, + }, +}) +``` |
