summaryrefslogtreecommitdiff
path: root/docs/installation.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/installation.md')
-rw-r--r--docs/installation.md135
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,
+ },
+})
+```