minimal extui fuzzy finder for neovim
Lua 99.6%
Vim Script 0.1%
Shell 0.1%
Other 0.3%
169 1 0

Clone this repository

https://tangled.org/robinwobin.dev/artio.nvim https://tangled.org/did:plc:khzb5upklnupwpxllpbmrv5a/artio.nvim
git@tangled.org:robinwobin.dev/artio.nvim git@tangled.org: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 ui2. 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 ui2
  • 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

ui2#

artio requires ui2 to be enabled.

an example of how to set this up is:

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

installation#

vim.pack

vim.pack.add({{ src = "https://codeberg.org/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
    marker = "│", -- prefix for marked items
    infolist = { "list" }, -- index: [1] list: (4/5)
    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-g>"] = "togglelive",
    ["<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)")

customize builtin pickers#

you're able to override the command used to find files:

-- ignore hidden files
vim.keymap.set("n", "<leader>ff", function()
    require('artio.builtins').files({
        findprg = [[ find . -type f -iregex '.*$*.*' -not -path '*/[@.]*' ]],
    })
end)

community#

issues are available on github and codeberg.

pr's are limited to codeberg