minimal extui fuzzy finder for neovim
Lua 99.5%
Vim Script 0.1%
Shell 0.1%
Other 0.4%
121 1 0

Clone this repository

https://tangled.org/robinwobin.dev/artio.nvim https://tangled.org/did:plc:khzb5upklnupwpxllpbmrv5a/artio.nvim
git@knot.tangled.wizardry.systems:robinwobin.dev/artio.nvim git@knot.tangled.wizardry.systems:did:plc:khzb5upklnupwpxllpbmrv5a/artio.nvim

For self-hosted knots, clone URLs may differ based on your setup.

Download tar.gz
README.md

artio.nvim#

A minimal, nature-infused file picker for Neovim using the new extui window. Inspired by forest spirits and the calm intuition of hunting, Artio helps you gently select files without the weight of heavy fuzzy-finder dependencies.

preview

features#

Requires Neovim >= 0.12

  • Lightweight picker window built on Neovim's extui
  • Prompt + list UI components - minimal and focused
  • Fuzzy filtering using matchfuzzy (built-in)
  • Icon support for common filetypes through mini.icons (optional)
  • No heavy dependencies - pure Lua

extui#

artio requires the extui to be enabled.

an example of how to set this up is:

require("vim._extui").enable({ enable = true, msg = {
  target = "msg",
} })

installation#

vim.pack

vim.pack.add({{ src = "https://github.com/comfysage/artio.nvim" }})

lazy.nvim

{
  "comfysage/artio.nvim", lazy = false,
}

configuration#

require("artio").setup({
  opts = {
    preselect = true, -- whether to preselect the first match
    bottom = true, -- whether to draw the prompt at the bottom
    shrink = true, -- whether the window should shrink to fit the matches
    promptprefix = "", -- prefix for the prompt
    prompt_title = true, -- whether to draw the prompt title
    pointer = "", -- pointer for the selected match
    use_icons = true, -- requires mini.icons
  },
  win = {
    height = 12,
    hidestatusline = false, -- works best with laststatus=3
  },
  -- NOTE: if you override the mappings, make sure to provide keys for all actions
  mappings = {
    ["<down>"] = "down",
    ["<up>"] = "up",
    ["<cr>"] = "accept",
    ["<esc>"] = "cancel",
    ["<tab>"] = "mark",
    ["<c-l>"] = "togglepreview",
    ["<c-q>"] = "setqflist",
    ["<m-q>"] = "setqflistmark",
  },
})

-- override built-in ui select with artio
vim.ui.select = require("artio").select

vim.keymap.set("n", "<leader><leader>", "<Plug>(artio-files)")
vim.keymap.set("n", "<leader>fg", "<Plug>(artio-grep)")

-- smart file picker
vim.keymap.set("n", "<leader>ff", "<Plug>(artio-smart)")

-- general built-in pickers
vim.keymap.set("n", "<leader>fh", "<Plug>(artio-helptags)")
vim.keymap.set("n", "<leader>fb", "<Plug>(artio-buffers)")
vim.keymap.set("n", "<leader>f/", "<Plug>(artio-buffergrep)")
vim.keymap.set("n", "<leader>fo", "<Plug>(artio-oldfiles)")