(import-macros {: foreach} :macros)
(local au vim.api.nvim_create_autocmd)
(local map vim.keymap.set)
(local pluginOptions (require :plugindata))
(fn Load_plugin [plugname]
(when (. pluginOptions plugname)
(let [url (.. "https://github.com/" plugname)
p (partial . pluginOptions plugname)
{ : modname : opts : callback : dependencies } p]
(when dependencies
(each [_ dep (ipairs dependencies)]
(Load_plugin dep)))
(vim.pack.add [url])
(when opts ((. (require modname) :setup) opts))
(when callback (callback))
(tset pluginOptions plugname nil))))
(au [:UIEnter]
{ :callback
#(foreach Load_plugin
[:folke/flash.nvim
:gbprod/substitute.nvim
:kylechui/nvim-surround
:andersecenrud/nvim_context_vt])})
(map :n :^a
#((Load_plugin :zbirenbaum/copilot.lua)
(let [sug (require :copilot.suggestion)]
(map :n :^a sug.toggle_auto_trigger)
(sug.toggle_auto_trigger))))
(map :n :g/
#((Load_plugin :nvim-telescope/telescope.nvim)
(let [tb (require :telescope.builtin)]
(map :n :g/ tb.live_grep)
(tb.live_grep))))
(map :n :m
#((Load_plugin :niuiic/track.nvim)
(vim.keymap.del :n :m)
(vim.fn.feedkeys :m)))
(map :n :<a-n>
#((Load_plugin :SmiteshP/nvim-navbuddy)
(map :n :<a-n> vim.cmd.Navbuddy)
(vim.cmd.Navbuddy)))
(fn Load_cmdln []
(require :command)
(require :fzf)
(Load_plugin :stevearc/oil.nvim))
(au [:CmdlineEnter]
{ :once true
:callback Load_cmdln })
(au [:InsertEnter :CmdlineEnter]
{ :once true
:callback
#(Load_plugin :altermo/ultimate-autopair.nvim)})
(au [:CursorMoved]
{ :once true
:callback
#((Load_plugin :mini.indentscope)
(Load_plugin :utilyre/sentiment.nvim)
(Load_plugin :hadronized/hop.nvim))})