;(local {: autolod} (require :nfnl.module))


(macro setup [name opts]
  `((. (require ,name) :setup) ,opts))

(macro plugin [name ?opts]
  (if (= nil ?opts)
    name
    (do (tset ?opts 1 name) ?opts)))

[(plugin :Olical/aniseed)
 (plugin :Olical/nfnl)
 (plugin :nvim-lua/plenary.nvim)
 (plugin :norcalli/nvim.lua)
 (plugin :kyazdani42/nvim-web-devicons)
 (plugin :folke/which-key.nvim)
 (plugin :ckipp01/nvim-jenkinsfile-linter
         {:dependencies ["nvim-lua/plenary.nvim"]})
 (plugin :psliwka/vim-smoothie)
 (plugin :nathanaelkane/vim-indent-guides
         {:cmd ["IndentGuidesToggle"]})
 (plugin :luukvbaal/stabilize.nvim {:config true})
 (plugin :stevearc/dressing.nvim {:config true})
 (plugin :tweekmonster/startuptime.vim {:cmd ["StartupTime"]})
 (plugin :moll/vim-bbye {:lazy true :cmd [:Bdelete :Bwipeout]})
 (plugin :petertriho/nvim-scrollbar
         {:event "VeryLazy"
          :lazy true
          :config true})
 (plugin :TimUntersberger/neogit
         {:opts {:integrations {:diffview true}}
          :cmd ["Neogit"]})
 (plugin :folke/persistence.nvim
         {:opts {:dir (vim.fn.expand (.. (vim.fn.stdpath "cache") "/sessions/"))}})


 (plugin "https://git.sr.ht/~whynothugo/lsp_lines.nvim"
         {:config #(do (setup :lsp_lines)
                    (vim.diagnostic.config {:virtual_lines false}))})

 ; editing and movement <<<
 (plugin :jiangmiao/auto-pairs)
 (plugin :tpope/vim-repeat)
 (plugin :preservim/nerdcommenter
         {:event "VeryLazy"
          :lazy true
          :priority 1000})
 (plugin :godlygeek/tabular
         {:cmd ["Tabularize"]})
 (plugin :tpope/vim-surround)
 (plugin :hauleth/sad.vim)
 (plugin :wellle/targets.vim) ; more text objects. IE: cin (change in next parens). generally better handling of surrounding objects.
 (plugin :mg979/vim-visual-multi
         {:lazy true :event "VeryLazy"})
 (plugin :tommcdo/vim-exchange) 
 (plugin :phaazon/hop.nvim
         {:lazy true
          :event "VeryLazy"
          :opts {:keys "jfkdls;amvieurow"}})
 ; >>>

 ; debugger <<<
 (plugin :rcarriga/nvim-dap-ui
         {:lazy true
          :config true
          :dependencies [:mfussenegger/nvim-dap
                         :nvim-neotest/nvim-nio]})
                         
 (plugin :mfussenegger/nvim-dap
         {:lazy true})
 (plugin :nvim-telescope/telescope-dap.nvim
         {:lazy true
          :dependencies [:nvim-telescope/telescope.nvim
                         :mfussenegger/nvim-dap]})
                                                   
 ; >>>
                                                   
 ; git stuff  <<<
 (plugin :ldelossa/gh.nvim
         {:lazy true
          :config #(do ((. (require "litee.lib") :setup))
                       ((. (require "litee.gh") :setup)))
          :dependencies [:ldelossa/litee.nvim]})
 (plugin :pwntester/octo.nvim
         {:lazy true
          :dependencies [:nvim-lua/plenary.nvim
                         :nvim-telescope/telescope.nvim
                         :kyazdani42/nvim-web-devicons]
                       :config true})

 (plugin :ruanyl/vim-gh-line)
 (plugin :rhysd/conflict-marker.vim)
 (plugin :tpope/vim-fugitive
         {:lazy true :event "VeryLazy"})
 ; >>>

 ; lsp <<<
 (plugin :ray-x/lsp_signature.nvim
         {:event :BufEnter})
 (plugin :weilbith/nvim-code-action-menu
         {:cmd "CodeActionMenu"
          :config #(set vim.g.code_action_menu_show_details false)})
 (plugin :dnlhc/glance.nvim
         {:lazy true :config true})

 (plugin :smjonas/inc-rename.nvim
         {:opts {:input_buffer_type "dressing"}})
 ; >>>

 ; cmp <<<
 ; >>>

 ; code-related ----------------------------------------- <<<

 (plugin :monkoose/nvlime
         {:ft ["lisp"] :dependencies [:monkoose/parsley]})

 (plugin :imsnif/kdl.vim)
 (plugin :tpope/vim-sleuth)
 (plugin :editorconfig/editorconfig-vim)
 (plugin :sbdchd/neoformat)
 (plugin :elkowar/antifennel-nvim
         {:config #(set vim.g.antifennel_executable "/home/leon/tmp/antifennel/antifennel")})
 (plugin :Olical/conjure {:ft ["fennel"]})
 (plugin :eraserhd/parinfer-rust {:build "cargo build --release"})
 (plugin :kmonad/kmonad-vim)
 (plugin :elkowar/yuck.vim {:ft ["yuck"]})
 (plugin :rhaiscript/vim-rhai {:ft ["rhai"]})
 (plugin :cespare/vim-toml {:ft ["toml"]})
 (plugin :bduggan/vim-raku {:ft ["raku"]})
 (plugin :LnL7/vim-nix {:ft ["nix"]})
 (plugin :kevinoid/vim-jsonc {})
 (plugin :pangloss/vim-javascript {:ft ["javascript"]}) ; syntax highlighting JS
 (plugin :ianks/vim-tsx {:ft ["typescript-react"]})
 (plugin :leafgarland/typescript-vim {:ft ["typescript" "typescript-react" "javascript"]})
 (plugin :HerringtonDarkholme/yats.vim {}) ; typescript syntax highlighting
 (plugin :mxw/vim-jsx {})
 (plugin :purescript-contrib/purescript-vim {:ft ["purescript"]})
 (plugin :derekelkins/agda-vim {:ft ["agda"]})
 (plugin :neovimhaskell/haskell-vim { :ft ["haskell"]})
 (plugin :monkoose/nvlime
         {:ft ["lisp"]
          :dependencies ["monkoose/parsley"]
          :config #(set vim.g.vlime_overlay "slimv")})


 (plugin :rhaiscript/vim-rhai)
 (plugin :rust-lang/rust.vim
         {:ft ["rust"]
          :dependencies ["mattn/webapi-vim"]
          :config #(do (set vim.g.rustfmt_fail_silently 1))})

 (plugin :Saecki/crates.nvim
         {:dependencies ["nvim-lua/plenary.nvim"]
          ;:event ["BufRead Cargo.toml"]
          ;:lazy true
          :opts {;:disable_invalid_feature_diagnostic true
                 :enable_update_available_warning false}})
                                
 ; temporarily using this fork that merges a few fixes, until simrat is back
 (plugin :mrcjkb/rustaceanvim {:version "^4" :ft ["rust" "toml"]})
 ;(plugin :MunifTanjim/rust-tools.nvim
         ;{:ft ["rust" "toml"]
          ;:dependencies ["nvim-lua/popup.nvim" "nvim-lua/plenary.nvim"]})
 ;(plugin :simrat39/rust-tools.nvim
         ;{:ft ["rust" "toml"]
          ;:dependencies ["nvim-lua/popup.nvim" "nvim-lua/plenary.nvim"]})


 (plugin :qnighy/lalrpop.vim {})
 (plugin :edwinb/idris2-vim {:ft ["idris2"]})
 (plugin :vmchale/ats-vim {:ft ["ats" "dats" "sats"]})
 (plugin :bakpakin/fennel.vim {:ft ["fennel"]})
 (plugin :evanleck/vim-svelte {})]


; >>>

; vim:foldmarker=<<<,>>>