return {
  {
    'norcalli/nvim-colorizer.lua',
    config = true,
    keys = { { '<leader>oc', '<Cmd>ColorizerToggle<Cr>', desc = 'Toggle colorizer' } },
    cmd = 'ColorizerToggle',
  },

  {
    'ThePrimeagen/harpoon',
    keys = {
      { '<leader>fm', function() require('harpoon.mark').add_file() end,        desc = 'Harpoon mark file' },
      { '<leader>fh', function() require('harpoon.ui').toggle_quick_menu() end, desc = 'Harpoon menu' },
      { '<C-1>',      function() require('harpoon.ui').nav_file(1) end,         desc = 'Harpoon file 1' },
      { '<C-2>',      function() require('harpoon.ui').nav_file(2) end,         desc = 'Harpoon file 2' },
      { '<C-3>',      function() require('harpoon.ui').nav_file(3) end,         desc = 'Harpoon file 3' },
      { '<C-4>',      function() require('harpoon.ui').nav_file(4) end,         desc = 'Harpoon file 4' },
      { '<C-5>',      function() require('harpoon.ui').nav_file(5) end,         desc = 'Harpoon file 5' },

    },
  },

  { 'AndrewRadev/linediff.vim', cmd = 'Linediff' },

  {
    'lukas-reineke/indent-blankline.nvim',
    event = 'VeryLazy',
    config = true,
    main = 'ibl',
    opts = {
      -- show_current_context = true,
      -- show_current_context_start = false,
      -- filetype_exclude = {
      --   'OverseerList',
      --   'OverseerForm',
      --   'lspinfo',
      --   'packer',
      --   'checkhealth',
      --   'help',
      --   'man',
      --   'norg',
      --   '',
      -- },
    },
  },

  {
    'echasnovski/mini.trailspace',
    version = '*',
    keys = {
      { '<leader>eT', function() MiniTrailspace.trim() end, desc = 'Trim whiltespace' },
    },
    config = true,
  },

  -- stolen from LazyVim
  {
    'stevearc/dressing.nvim',
    lazy = true,
    init = function()
      ---@diagnostic disable-next-line: duplicate-set-field
      vim.ui.select = function(...)
        require('lazy').load({ plugins = { 'dressing.nvim' } })
        return vim.ui.select(...)
      end
      ---@diagnostic disable-next-line: duplicate-set-field
      vim.ui.input = function(...)
        require('lazy').load({ plugins = { 'dressing.nvim' } })
        return vim.ui.input(...)
      end
    end,
  },

  {
    'numToStr/Comment.nvim',
    config = true,
  },

  { 'dyng/ctrlsf.vim',          cmd = 'CtrlSF' },
  {
    'https://git.sr.ht/~whynothugo/lsp_lines.nvim',
    config = function()
      local lines = require('lsp_lines')
      lines.setup()
      vim.diagnostic.config({
        virtual_lines = function(_, bufnr)
          local ft = vim.api.nvim_get_option_value('filetype', { buf = bufnr })
          if ft == 'lazy' then
            return false
          else
            return { only_current_line = true }
          end
        end,
      })
    end,
  },

  {
    'andymass/vim-matchup',
    event = 'BufRead',
    config = function()
      vim.g.matchup_matchparen_offscreen = {}
    end,
  },

  { 'fpob/nette.vim',          ft = 'nette' },
  { 'ziglang/zig.vim',         ft = 'zig' },
  { 'chrisbra/csv.vim',        ft = 'csv' },
  { 'NoahTheDuke/vim-just' },
  { 'towolf/vim-helm' },
  { 'grafana/vim-alloy' },
  { 'kcl-lang/kcl.nvim' },

  { 'williamboman/mason.nvim', cmd = 'Mason', config = true },

  {
    'yorickpeterse/nvim-pqf',
    opts = {
      signs = {
        error = { text = 'E', hl = 'DiagnosticSignError' },
        warning = { text = 'W', hl = 'DiagnosticSignWarn' },
        info = { text = 'I', hl = 'DiagnosticSignInfo' },
        hint = { text = 'H', hl = 'DiagnosticSignHint' },
      },

      -- By default, only the first line of a multi line message will be shown.
      -- When this is true, multiple lines will be shown for an entry, separated by
      -- a space
      show_multiple_lines = false,

      -- How long filenames in the quickfix are allowed to be. 0 means no limit.
      -- Filenames above this limit will be truncated from the beginning with
      -- `filename_truncate_prefix`.
      max_filename_length = 40,

      -- Prefix to use for truncated filenames.
      filename_truncate_prefix = '[...]',
    },
  },

  {
    'mfussenegger/nvim-jdtls',
    ft = 'java',
  },

  {
    'kristijanhusak/vim-dadbod-ui',
    dependencies = {
      { 'tpope/vim-dadbod', lazy = true },
      { 'kristijanhusak/vim-dadbod-completion', ft = { 'sql', 'mysql', 'plsql' }, lazy = true },
    },
    cmd = {
      'DBUI',
      'DBUIToggle',
      'DBUIAddConnection',
      'DBUIFindBuffer',
    },
    init = function()
      -- Your DBUI configuration
      vim.g.db_ui_use_nerd_fonts = 1
    end,
  }
}
