local M = {}
local conf = require('user.modules.editor.config')

-- Syntax not covered by nvim-treesitter
M['nfnty/vim-nftables'] = { ft = 'nftables' }
M['MTDL9/vim-log-highlighting'] = { ft = 'log' }
M['Glench/Vim-Jinja2-Syntax'] = { ft = 'jinja' }
M['mracos/mermaid.vim'] = { ft = 'mermaid' }

M['norcalli/nvim-colorizer.lua'] = {
    cmd = 'ColorizerToggle',
    config = conf.colorizer,
}
M['Olical/conjure'] = { -- TODO: config, check out fennel-repl.nvim
    ft = { 'clojure', 'fennel', 'scheme', 'hy', 'janet', 'racket' },
}
M['nvim-orgmode/orgmode'] = {
    ft = 'org',
    -- requires = {
    --     {
    --         'akinsho/org-bullets.nvim',
    --         after = 'orgmode.nvim',
    --         config = conf.org_bullets,
    --     },
    -- },
    config = conf.orgmode,
}
M['folke/todo-comments.nvim'] = {
    wants = 'plenary.nvim',
    event = 'BufRead',
    config = conf.todo_comments,
}
M['nvim-treesitter/nvim-treesitter'] = {
    run = ':TSUpdate',
    event = 'BufRead',
    wants = {
        'nvim-ts-rainbow',
        'nvim-treesitter-refactor',
    },
    requires = {
        { 'p00f/nvim-ts-rainbow', opt = true },
        { 'nvim-treesitter/nvim-treesitter-refactor', opt = true },
    },
    config = conf.treesitter,
}
M['JoosepAlviste/nvim-ts-context-commentstring'] = { after = 'nvim-treesitter' }
M['nvim-treesitter/nvim-treesitter-textobjects'] = { after = 'nvim-treesitter' }
M['romgrk/nvim-treesitter-context'] = { after = 'nvim-treesitter' }
M['windwp/nvim-ts-autotag'] = {
    ft = {
        'html',
        'javascript',
        'javascriptreact',
        'typescript',
        'typescriptreact',
        'svelte',
        'vue',
    },
}
M['nvim-treesitter/playground'] = {
    cmd = { 'TSHighlightCapturesUnderCursor', 'TSPlaygroundToggle' },
    wants = 'nvim-treesitter',
}
M['andymass/vim-matchup'] = {
    after = 'nvim-treesitter',
    config = conf.matchup,
}
M['lukas-reineke/indent-blankline.nvim'] = {
    after = 'nvim-treesitter',
    config = conf.indent_blankline,
}
M['mizlan/iswap.nvim'] = {
    cmd = { 'ISwapWith', 'ISwap' },
    wants = 'nvim-treesitter',
    config = conf.iswap,
}
M['machakann/vim-sandwich'] = { keys = 's' } -- TODO: check out surround.nvim
M['folke/zen-mode.nvim'] = {
    cmd = 'ZenMode',
    wants = 'twilight.nvim',
    requires = {
        {
            'folke/twilight.nvim',
            cmd = { 'Twilight', 'TwilightEnable' },
            config = conf.twilight,
            opt = true,
        },
    },
    config = conf.zenmode,
}
M['max397574/better-escape.nvim'] = {
    event = 'InsertCharPre',
    config = conf.better_escape,
}
M['phaazon/hop.nvim'] = { -- TODO: check out lightspeed.nvim
    cmd = { 'HopChar1', 'HopChar2', 'HopWord', 'HopPattern', 'HopLine' },
    config = conf.hop,
}
M['monaqa/dial.nvim'] = {
    wants = 'plenary.nvim',
    keys = {
        { 'n', '<C-a>' },
        { 'v', '<C-a>' },
        { 'v', 'g<C-a>' },
        { 'n', '<C-x>' },
        { 'v', '<C-x>' },
        { 'v', 'g<C-x>' },
    },
    config = conf.dial,
}
M['junegunn/vim-easy-align'] = { cmd = { 'EasyAlign', 'LiveEasyAlign' } }
M['dhruvasagar/vim-table-mode'] = {
    cmd = { 'Tableize', 'TableModeToggle', 'TableModeRealign' },
    setup = conf.table_mode,
}
M['numToStr/Comment.nvim'] = {
    keys = { 'gc', 'gb' },
    wants = 'nvim-ts-context-commentstring',
    config = conf.comment,
}
M['winston0410/range-highlight.nvim'] = {
    event = 'CmdlineEnter',
    wants = 'cmd-parser.nvim',
    requires = { { 'winston0410/cmd-parser.nvim', opt = true } },
    config = conf.range_highlight,
}
M['danymat/neogen'] = {
    cmd = 'Neogen',
    wants = 'nvim-treesitter',
    config = conf.neogen,
}
M['gpanders/editorconfig.nvim'] = {
    event = { 'BufRead', 'BufNewFile' },
}
M['eraserhd/parinfer-rust'] = { -- TODO: move to nvim-parinfer (lua)
    run = 'cargo build --release',
    ft = { 'clojure', 'lisp', 'scheme', 'fennel', 'racket', 'hy', 'janet', 'carp', 'wast' },
}
M['ahmedkhalf/project.nvim'] = {
    event = 'BufEnter',
    config = conf.project,
}
M['ruifm/gitlinker.nvim'] = {
    wants = 'plenary.nvim',
    keys = { '<leader>gy', '<leader>gY' },
    config = conf.gitlinker,
}
M['jbyuki/venn.nvim'] = { cmd = 'VBox' }
M['karb94/neoscroll.nvim'] = {
    event = 'WinScrolled',
    config = conf.neoscroll,
}
M['lewis6991/gitsigns.nvim'] = {
    event = { 'BufRead', 'BufNewFile' },
    wants = 'plenary.nvim',
    config = conf.gitsigns,
}

return M
