(import-macros {: foreachMulti} :macros)
(local map vim.keymap.set)

{ :folke/flash.nvim
  { :modname "flash"
    :opts    {}
    :callback
    #((: (require :flash) :toggle true)) }

  :gbprod/substitute.nvim
  { :modname "substitute"
    :callback
    #(let [sub (require :substitute)]
       (map :n :s sub.operator)
       (map :n :ss sub.line)
       (map :n :S sub.eol)
       (map :x :s sub.visual)) }

  :kylechui/nvim-surround
  { :modname "nvim-surround"
    :opts    {} }

  :stevearc/oil.nvim
  { :modname "oil"
    :opts
    { :columns [:icon :permission :size :mtime] }
    :callback
    #(map :n :^o (. (require :oil) :toggle_float)) }

  :altermo/ultimate-autopair.nvim
  { :modname "ultimate-autopair"
    :opts
    { :fastwarp { :rmap "<a-y>" :rcmap "<a-y>" }
      :tabout   { :enable true :multi true :hopout true }
      :bs       { :indent_ignore true }
      :space2   { :enable true }
      :extensions { :fly { :enable true :multiline true } } } }

  :utilyre/sentiment.nvim
  { :modname "sentiment"
    :opts    {}
    :callback #(tset vim :g :loaded_matchparen 1) }

  :niui/track.nvim
  { :modname "trach"
    :opts    {}
    :callback
    #(let [track (require :track) markfile (.. (vim.fn.stdpath :data) "marks/mark.json")]
       (foreachMulti (partial map :n)
         [[:ma track.add_mark]
          [:mA track.add_flow]
          [:md track.delete_mark]
          [:mD track.delete_flow]
          [:mu track.update_mark]
          [:mU track.update_flow]
          [:ms #(track.store_marks markfile)]])
       (track.restore_marks markfile)) }

  :nvim-telescope/telescope.nvim
  { :modname "telescope"
    :opts    {}
    :dependencies [:nvim-lua/plenary.nvim] }

  :hadronized/hop.nvim
  { :modname "hop"
    :opts    {}
    :callback
    #(let [hop (require :hop)]
       (foreachMulti (partial map [:n :v :o])
         [[:gw hop.hint_words]
          [:ga hop.hint_anywhere]])) }

  :zbirenbaum/copilot.lua
  { :modname "copilot"
    :opts
    { :suggestion
      { :enabled true
        :auto_trigger false
        :keymap
        { :accept   :<c-s-y>
          :next     :<c-s-n>
          :prev     :<c-s-p>
          :dismiss  :<c-s-e> } }
      :filetypes { :gitcommit true } } }

  :nvim-treesitter/nvim-treesitter
  { :modname :nvim-treesitter
    :opts    { :ensure_installed "all" } }

  :SmiteshP/nvim-navic
  { :modname "nvim-navic"
    :opts
    { :lsp { :auto_attach true }
      :highlight true} }

  :SmiteshP/nvim-navbuddy
  { :modname "nvim-navbuddy"
    :opts
    { :lsp { :auto_attach true }
      :highlight true }
    :dependencies [:SmiteshP/nvim-navic :MunifTanjim/nui.nvim] }

  :MunifTanjim/nui.nvim { :modname "nui" }

  :andersevenrud/nvim_context_vt
  { :modname "nvim_context_vt"
    :opts    { :enabled true } }

  :sphamba/smear-cursor.nvim
  { :modname "smear_cursor"
    :opts    {} }

  :nvim-tree/nvim-web-devicons {}
  :niuiic/core.nvim {}
  :nvim-lua/plenary.nvim {}
}