Skip to content

🐻 minimal extui fuzzy finder for Neovim

License

Notifications You must be signed in to change notification settings

comfysage/artio.nvim

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

159 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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)

About

🐻 minimal extui fuzzy finder for Neovim

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

Contributors

Languages