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.
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
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",
} })vim.pack
vim.pack.add({{ src = "https://codeberg.org/comfysage/artio.nvim" }})lazy.nvim
{
"comfysage/artio.nvim", lazy = false,
}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)")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)