return {
    {
        'kylechui/nvim-surround',
        version = '*',
        event = 'VeryLazy',
        config = true,
    },
    {
        'mateuszwieloch/automkdir.nvim',
        event = 'VeryLazy',
    },
    {
        'NeogitOrg/neogit',
        dependencies = {
            'nvim-lua/plenary.nvim',
            'sindrets/diffview.nvim',
            'nvim-telescope/telescope.nvim',
            'nvim-tree/nvim-web-devicons',
            'folke/which-key.nvim',
        },
        config = function()
            local wk = require('which-key')
            local neogit = require('neogit')
            wk.add({
                { '<leader>g', group = 'git' },
                { '<leader>gn', neogit.open, desc = 'neogit' },
                { '<leader>gd', ':DiffviewOpen<CR>', desc = 'diffview' },
            })
            neogit.setup({})
        end,
        event = 'VeryLazy'
    },
    {
        'windwp/nvim-autopairs',
        event = 'InsertEnter',
        dependencies = { 'hrsh7th/nvim-cmp' },
        config = function()
            local autopairs = require('nvim-autopairs')

            autopairs.setup({
                check_ts = true,
                disable_filetype = { 'TelescopePrompt', 'spectre_panel', 'scheme', 'lisp', 'clojure', },
            })

            -- remove single-quote rule for some languages
            autopairs.get_rule("'")[1].not_filetypes = { 'scheme', 'lisp', 'ocaml', 'sml', 'rust' }

            local cmp_autopairs = require('nvim-autopairs.completion.cmp')

            local cmp = require('cmp')

            cmp.event:on('confirm_done', cmp_autopairs.on_confirm_done())
        end
    },
    {
        'akinsho/toggleterm.nvim',
        version = '*',
        event = 'VeryLazy',
        opts = {
            open_mapping = [[<C-\>]]
        }
    },
    {
        'numToStr/Navigator.nvim',
        config = function()
            local navigator = require('Navigator')
            vim.keymap.set({'n', 't'}, '<A-h>', navigator.left)
            vim.keymap.set({'n', 't'}, '<A-j>', navigator.down)
            vim.keymap.set({'n', 't'}, '<A-k>', navigator.up)
            vim.keymap.set({'n', 't'}, '<A-l>', navigator.right)
            vim.keymap.set({'n', 't'}, '<A-p>', navigator.previous)
            navigator.setup()
        end
    },
    {
        'echasnovski/mini.align',
        version = false,
        opts = {
            -- modifiers = {
            --     i = function(steps, _)
            --         table.insert(steps.pre_split, align.gen_step.ignore_split({ '".-"', "'.-'", '(.-)' }))
            --     end
            -- }
        }
    },
    {
        'stevearc/conform.nvim',
        opts = {
            formatters_by_ft = {
                rust = { 'rustfmt', lsp_format = 'fallback' },
                sml = { 'smlfmt' },
            },
            format_on_save = {
                timeout_ms = 500,
                lsp_format = 'fallback',
            }
        }
    }
}
