return {
  -- A better annotation generator.
  -- Supports multiple languages and annotation conventions.
  -- https://github.com/danymat/neogen
  {
    'danymat/neogen',
    version = '*',
    opts = { enabled = true, snippet_engine = 'luasnip' },
  },

  -- Terminal manager for (neo)vim
  -- https://github.com/voldikss/vim-floaterm
  {
    'voldikss/vim-floaterm',
    cmd = { 'FloatermToggle' },
    init = function()
      vim.g.floaterm_width = 0.8
      vim.g.floaterm_height = 0.8
    end,
  },

  -- Run your tests at the speed of thought
  -- https://github.com/vim-test/vim-test
  {
    'vim-test/vim-test',
    dependencies = { 'voldikss/vim-floaterm' },
    config = function()
      vim.cmd [[
      function! PhpUnitTransform(cmd) abort
        return join(map(split(a:cmd), 'v:val == "--colors" ? "--colors=always" : v:val'))
      endfunction

      let g:test#custom_transformations = {'phpunit': function('PhpUnitTransform')}
      let g:test#transformation = 'phpunit'

      " let test#php#phpunit#options = '--colors=always'
      let test#php#pest#options = '-v'
      let test#javascript#jest#options = '--color'

      function! FloatermStrategy(cmd)
        execute 'silent FloatermSend q'
        execute 'silent FloatermKill'
        execute 'FloatermNew! '.a:cmd.' | less -X'
      endfunction

      let g:test#custom_strategies = {'floaterm': function('FloatermStrategy')}
      let g:test#strategy = 'floaterm'
    ]]
    end,
  },

  -- Cloak allows you to overlay *'s over defined patterns in defined files.
  -- https://github.com/laytan/cloak.nvim
  {
    'laytan/cloak.nvim',
    version = '*',
    opts = {
      enabled = true,
      cloak_character = '*',
      -- The applied highlight group (colors) on the cloaking, see `:h highlight`.
      highlight_group = 'Comment',
      patterns = {
        {
          -- Match any file starting with ".env".
          -- This can be a table to match multiple file patterns.
          file_pattern = {
            '.env*',
            'wrangler.toml',
            '.dev.vars',
          },
          -- Match an equals sign and any character after it.
          -- This can also be a table of patterns to cloak,
          -- example: cloak_pattern = { ":.+", "-.+" } for yaml files.
          cloak_pattern = '=.+',
        },
      },
    },
  },

  -- projectionist.vim: Granular project configuration
  -- https://github.com/tpope/vim-projectionist
  {
    'tpope/vim-projectionist',
    dependencies = 'tpope/vim-dispatch',
    config = function()
      vim.g.projectionist_heuristics = {
        artisan = {
          ['*'] = {
            start = 'php artisan serve',
            console = 'php artisan tinker',
          },
          ['app/*.php'] = {
            type = 'source',
            alternate = {
              'tests/Unit/{}Test.php',
              'tests/Feature/{}Test.php',
            },
          },
          ['tests/Feature/*Test.php'] = {
            type = 'test',
            alternate = 'app/{}.php',
          },
          ['tests/Unit/*Test.php'] = {
            type = 'test',
            alternate = 'app/{}.php',
          },
          ['app/Models/*.php'] = {
            type = 'model',
          },
          ['app/Http/Controllers/*.php'] = {
            type = 'controller',
          },
          ['routes/*.php'] = {
            type = 'route',
          },
          ['database/migrations/*.php'] = {
            type = 'migration',
          },
        },
        ['src/&composer.json'] = {
          ['src/*.php'] = {
            type = 'source',
            alternate = {
              'tests/{}Test.php',
            },
          },
          ['tests/*Test.php'] = {
            type = 'test',
            alternate = 'src/{}.php',
          },
        },
        ['app/&composer.json'] = {
          ['app/*.php'] = {
            type = 'source',
            alternate = {
              'tests/{}Test.php',
            },
          },
          ['tests/*Test.php'] = {
            type = 'test',
            alternate = 'app/{}.php',
          },
        },
      }
    end,
  },

  -- A vim text object for XML/HTML attributes.
  -- https://github.com/whatyouhide/vim-textobj-xmlattr
  {
    'whatyouhide/vim-textobj-xmlattr',
    dependencies = { 'kana/vim-textobj-user' },
  },

  -- Describe the regexp under the cursor
  -- https://github.com/bennypowers/nvim-regexplainer
  {
    'bennypowers/nvim-regexplainer',
    event = 'BufEnter',
    dependencies = {
      'nvim-treesitter/nvim-treesitter',
      'MunifTanjim/nui.nvim',
    },
    opts = {
      -- automatically show the explainer when the cursor enters a regexp
      auto = true,
    },
  },

  -- Clarify and beautify your comments using boxes and lines.
  -- https://github.com/LudoPinelli/comment-box.nvim
  {
    'LudoPinelli/comment-box.nvim',
    event = 'BufEnter',
    opts = {},
  },

  -- Plugin to improve viewing Markdown files in Neovim
  -- https://github.com/MeanderingProgrammer/render-markdown.nvim
  {
    'MeanderingProgrammer/render-markdown.nvim',
    event = 'BufEnter',
    dependencies = {
      'nvim-treesitter/nvim-treesitter',
      'nvim-tree/nvim-web-devicons',
    },
    ft = 'markdown',
    opts = {},
  },

  {
    'ray-x/go.nvim',
    dependencies = { -- optional packages
      'ray-x/guihua.lua',
      'neovim/nvim-lspconfig',
      'nvim-treesitter/nvim-treesitter',
    },
    config = function() require('go').setup() end,
    event = { 'CmdlineEnter' },
    ft = { 'go', 'gomod' },
    build = ':lua require("go.install").update_all_sync()', -- if you need to install/update all binaries
  },

  -- Mainly a PHP Language Server with more features than you can shake a stick at
  -- https://github.com/phpactor/phpactor
  {
    'phpactor/phpactor',
    build = 'composer install --no-dev --optimize-autoloader',
    ft = 'php',
  },
}
