🪴 my neovim config:)
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

plugins: switch to aspen

robin 2dc4f1b5 e15be9f5

+64 -219
+12
config/config/aspen.lua
··· 1 + -- pum bindings (completion) 2 + -- use: 3 + -- <c-space>: to open the completion window 4 + -- <cr>: to confirm completion 5 + -- <tab>: to select the next completion item 6 + -- <s-tab>: to select the previous completion item 7 + local pummap = require("aspen.pummap") 8 + 9 + vim.keymap.set({ "i", "c" }, "<c-space>", "<Plug>(aspen-trigger)") 10 + pummap("<cr>", "<Plug>(aspen-accept)") 11 + pummap("<tab>", "<Plug>(aspen-next)") 12 + pummap("<s-tab>", "<Plug>(aspen-prev)")
-212
config/config/blink.cmp.lua
··· 1 - local ok, icons = pcall(require, "mini.icons") 2 - if not ok then 3 - vim.notify("could not find `mini.icons` module", vim.log.leves.WARN) 4 - end 5 - 6 - local keymap = { 7 - preset = "none", 8 - ["<c-space>"] = { "show", "show_documentation", "hide_documentation" }, 9 - ["<C-e>"] = { "hide" }, 10 - ["<CR>"] = { "accept", "fallback" }, 11 - 12 - ["<tab>"] = { 13 - "select_next", 14 - "snippet_forward", 15 - "fallback", 16 - }, 17 - ["<s-tab>"] = { "select_prev", "snippet_backward", "fallback" }, 18 - ["<down>"] = { "select_next", "fallback" }, 19 - ["<up>"] = { "select_prev", "fallback" }, 20 - 21 - ["<c-b>"] = { "scroll_documentation_up", "fallback" }, 22 - ["<c-f>"] = { "scroll_documentation_down", "fallback" }, 23 - } 24 - 25 - local ok, result = pcall(require("blink.cmp").setup, { 26 - cmdline = { 27 - enabled = true, 28 - completion = { 29 - menu = { 30 - auto_show = true, 31 - }, 32 - list = { 33 - selection = { 34 - preselect = false, 35 - }, 36 - }, 37 - }, 38 - keymap = keymap, 39 - -- By default, we choose providers for the cmdline based on the current cmdtype 40 - -- You may disable cmdline completions by replacing this with an empty table 41 - sources = function() 42 - local type = vim.fn.getcmdtype() 43 - -- Search forward and backward 44 - if type == "/" or type == "?" then 45 - return { "buffer", "lsp" } 46 - end 47 - -- Commands 48 - if type == ":" then 49 - return { "cmdline", "path" } 50 - end 51 - return {} 52 - end, 53 - }, 54 - -- 'default' for mappings similar to built-in completion 55 - -- 'super-tab' for mappings similar to vscode (tab to accept, arrow keys to navigate) 56 - -- 'enter' for mappings similar to 'super-tab' but with 'enter' to accept 57 - -- see the "default configuration" section below for full documentation on how to define 58 - -- your own keymap. 59 - keymap = keymap, 60 - 61 - appearance = { 62 - kind_icons = { 63 - Class = icons.get("lsp", "class"), 64 - Color = icons.get("lsp", "color"), 65 - Constant = icons.get("lsp", "constant"), 66 - Constructor = icons.get("lsp", "constructor"), 67 - Enum = icons.get("lsp", "enum"), 68 - EnumMember = icons.get("lsp", "enummember"), 69 - Event = icons.get("lsp", "event"), 70 - Field = icons.get("lsp", "field"), 71 - File = icons.get("lsp", "file"), 72 - Folder = icons.get("lsp", "folder"), 73 - Function = icons.get("lsp", "function"), 74 - Interface = icons.get("lsp", "interface"), 75 - Keyword = icons.get("lsp", "keyword"), 76 - Method = icons.get("lsp", "method"), 77 - Module = icons.get("lsp", "module"), 78 - Operator = icons.get("lsp", "operator"), 79 - Property = icons.get("lsp", "property"), 80 - Reference = icons.get("lsp", "reference"), 81 - Snippet = icons.get("lsp", "snippet"), 82 - Struct = icons.get("lsp", "struct"), 83 - Text = icons.get("lsp", "text"), 84 - TypeParameter = icons.get("lsp", "typeparameter"), 85 - Unit = icons.get("lsp", "unit"), 86 - Value = icons.get("lsp", "value"), 87 - Variable = icons.get("lsp", "variable"), 88 - }, 89 - }, 90 - 91 - completion = { 92 - trigger = { 93 - show_on_keyword = true, 94 - }, 95 - 96 - list = { 97 - cycle = { 98 - from_top = false, 99 - from_bottom = false, 100 - }, 101 - }, 102 - 103 - menu = { 104 - min_width = vim.o.pumwidth, 105 - max_height = vim.o.pumheight, 106 - scrolloff = 0, 107 - border = "none", 108 - 109 - draw = { 110 - -- align_to = "label", -- or 'none' to disable, or 'cursor' to align to the cursor 111 - padding = 1, 112 - gap = 1, 113 - treesitter = { "buffer", "lsp" }, 114 - columns = { { "kind_icon" }, { "label", "label_description", gap = 1 }, { "source_name" } }, 115 - components = { 116 - source_name = { 117 - width = { max = 30 }, 118 - text = function(ctx) 119 - return string.format("(%s)", ctx.source_name) 120 - end, 121 - highlight = "BlinkCmpSource", 122 - }, 123 - kind_icon = { 124 - text = function(ctx) 125 - if ctx.kind == "Color" then 126 - ctx.kind_icon = "󱓻" 127 - end 128 - return ctx.kind_icon .. ctx.icon_gap 129 - end, 130 - highlight = function(ctx) 131 - local _, hl, _ = require("mini.icons").get("lsp", ctx.kind) 132 - return hl 133 - end, 134 - }, 135 - kind = { 136 - highlight = function(ctx) 137 - local _, hl, _ = require("mini.icons").get("lsp", ctx.kind) 138 - return hl 139 - end, 140 - }, 141 - }, 142 - }, 143 - }, 144 - 145 - ghost_text = { 146 - enabled = true, 147 - }, 148 - }, 149 - 150 - -- default list of enabled providers defined so that you can extend it 151 - -- elsewhere in your config, without redefining it, due to `opts_extend` 152 - sources = { 153 - default = { "lsp", "path", "snippets", "buffer", "windsurf" }, 154 - 155 - per_filetype = { 156 - minifiles = { "path", "buffer" }, 157 - }, 158 - 159 - providers = { 160 - windsurf = { 161 - name = "windsurf", 162 - module = "codeium.blink", 163 - async = true, 164 - max_items = 2, 165 - }, 166 - }, 167 - 168 - transform_items = function(_, items) 169 - return vim 170 - .iter(ipairs(items)) 171 - :map(function(_, item) 172 - if item.kind == require("blink.cmp.types").CompletionItemKind.Snippet then 173 - item.score_offset = item.score_offset + 1 174 - end 175 - if item.source == "windsurf" then 176 - item.score_offset = item.score_offset + 2 177 - end 178 - return item 179 - end) 180 - :totable() 181 - end, 182 - min_keyword_length = function() 183 - local default = 1 184 - return vim.bo.filetype == "markdown" and 2 or default 185 - end, 186 - }, 187 - 188 - -- experimental signature help support 189 - signature = { 190 - enabled = false, 191 - }, 192 - 193 - fuzzy = { 194 - max_typos = function(_) 195 - return 0 196 - end, 197 - -- frecency tracks the most recently/frequently used items and boosts the score of the item 198 - frecency = { 199 - enabled = false, 200 - }, 201 - -- proximity bonus boosts the score of items matching nearby words 202 - use_proximity = true, 203 - 204 - prebuilt_binaries = { 205 - download = false, 206 - }, 207 - }, 208 - }) 209 - if not ok then 210 - vim.notify("error configuring blink.cmp:\n\t" .. result, vim.log.levels.ERROR) 211 - return 212 - end
+1
config/config/mini.lua
··· 206 206 }, 207 207 }) 208 208 require("mini.icons").mock_nvim_web_devicons() 209 + require("mini.icons").tweak_lsp_kind()
+8 -4
config/lua/ivy/config/options.lua
··· 32 32 vim.o.sidescrolloff = 15 33 33 vim.o.mousescroll = "ver:1,hor:1" 34 34 35 - -- completion height 36 - vim.o.pumheight = 15 37 - vim.opt.wildoptions = { "fuzzy", "pum", "tagfile" } 38 - vim.opt.wildmode = { "longest:full", "full" } 35 + -- completion options 36 + vim.o.pumheight = 8 37 + vim.o.pummaxwidth = 42 38 + vim.opt.wildoptions = { "pum", "tagfile" } 39 + vim.opt.wildmode = { "list", "full" } 40 + vim.o.complete = "." 39 41 vim.opt.completeopt = { "menuone", "noinsert" } 42 + vim.o.autocomplete = true 43 + vim.opt.shortmess:append("c") -- don't show autocomplete messages 40 44 41 45 -- split directions 42 46 vim.o.splitbelow = true
+1 -2
config/lua/ivy/plugins/init.lua
··· 75 75 76 76 -- completion 77 77 { 78 - "blink.cmp", 78 + "aspen", 79 79 event = "UIEnter", 80 - deps = { "windsurf.nvim" }, 81 80 }, 82 81 83 82 {
+22
pkgs/ivy-plugins/_sources/generated.json
··· 21 21 }, 22 22 "version": "9e9c54ed8bae53fa6458299acbc9e0c1e5c27645" 23 23 }, 24 + "aspen-nvim": { 25 + "cargoLock": null, 26 + "date": "2026-02-03", 27 + "extract": null, 28 + "name": "aspen-nvim", 29 + "passthru": { 30 + "as": "aspen" 31 + }, 32 + "pinned": false, 33 + "src": { 34 + "deepClone": false, 35 + "fetchSubmodules": false, 36 + "leaveDotGit": false, 37 + "name": null, 38 + "rev": "77e5f481fd0c6c01272d957ec1d350d6d97433ad", 39 + "sha256": "sha256-nCmxzW/Ja1Y1QQjJvI/iylCzDprkwBbVZPNzMga5ViQ=", 40 + "sparseCheckout": [], 41 + "type": "git", 42 + "url": "https://codeberg.org/comfysage/aspen.nvim" 43 + }, 44 + "version": "77e5f481fd0c6c01272d957ec1d350d6d97433ad" 45 + }, 24 46 "blink-indent": { 25 47 "cargoLock": null, 26 48 "date": "2026-01-12",
+15
pkgs/ivy-plugins/_sources/generated.nix
··· 21 21 as = "artio"; 22 22 date = "2026-02-01"; 23 23 }; 24 + aspen-nvim = { 25 + pname = "aspen-nvim"; 26 + version = "77e5f481fd0c6c01272d957ec1d350d6d97433ad"; 27 + src = fetchgit { 28 + url = "https://codeberg.org/comfysage/aspen.nvim"; 29 + rev = "77e5f481fd0c6c01272d957ec1d350d6d97433ad"; 30 + fetchSubmodules = false; 31 + deepClone = false; 32 + leaveDotGit = false; 33 + sparseCheckout = [ ]; 34 + sha256 = "sha256-nCmxzW/Ja1Y1QQjJvI/iylCzDprkwBbVZPNzMga5ViQ="; 35 + }; 36 + as = "aspen"; 37 + date = "2026-02-03"; 38 + }; 24 39 blink-indent = { 25 40 pname = "blink-indent"; 26 41 version = "9c80820ca77218a8d28e70075d6f44a1609911fe";
+5
pkgs/ivy-plugins/nvfetcher.toml
··· 3 3 src.git = "https://codeberg.org/comfysage/artio.nvim" 4 4 passthru.as = "artio" 5 5 6 + [aspen-nvim] 7 + fetch.git = "https://codeberg.org/comfysage/aspen.nvim" 8 + src.git = "https://codeberg.org/comfysage/aspen.nvim" 9 + passthru.as = "aspen" 10 + 6 11 [blink-indent] 7 12 fetch.github = "saghen/blink.indent" 8 13 src.git = "https://github.com/saghen/blink.indent"
-1
pkgs/ivy/package.nix
··· 191 191 patrionedPlugins.opt 192 192 193 193 # extra plugsns beacuse they often fail or need extra steps 194 - vimPlugins.blink-cmp 195 194 vimPlugins.blink-pairs 196 195 (vimPlugins.cord-nvim.overrideAttrs { 197 196 doCheck = false;