-- Add the in built Cfilter plugin. Replaces QFGrep.
vim.cmd 'packadd cfilter'
vim.cmd 'packadd packer.nvim'

local init = function ()
  use {'wbthomason/packer.nvim', opt = true}
  -- Vertical Motion
  use 'phaazon/hop.nvim'
  -- Search
  use {
    'junegunn/fzf',
    run = './install --bin'
  }
  use 'junegunn/fzf.vim'
  use 'wincent/ferret'
  use 'bronson/vim-visual-star-search'
  -- Manage Project sessions
  use 'thaerkh/vim-workspace'
  -- For autocompletion
  use {
    'hrsh7th/nvim-cmp',
    requires = {
      'hrsh7th/cmp-nvim-lsp',
      'hrsh7th/cmp-nvim-lua',
      'hrsh7th/cmp-buffer',
      'hrsh7th/cmp-path',
      'onsails/lspkind-nvim',
      'L3MON4D3/LuaSnip',
      'saadparwaiz1/cmp_luasnip',
      'rafamadriz/friendly-snippets'
    }
  }
  -- Git support
  use 'lewis6991/gitsigns.nvim'
  use {
    'tpope/vim-fugitive',
    requires = {
      -- GBrowse support
      'tpope/vim-rhubarb',
      'shumphrey/fugitive-gitlab.vim',
      'https://git.sr.ht/~willdurand/srht.vim',
      'mattn/webapi-vim'
    }
  }
  use 'whiteinge/diffconflicts'
  -- Boost vim command line mode
  use 'vim-utils/vim-husk'
  -- Quickfix
  use 'yssl/QFEnter'
  use 'chengzeyi/fzf-preview.vim'
  use {
    'https://gitlab.com/yorickpeterse/nvim-pqf',
    config = function()
      require('pqf').setup()
    end
  }
  -- Text Object plugins
  use {
    'wellle/targets.vim',
    'tpope/vim-surround',
    'tommcdo/vim-exchange',
    'chaoren/vim-wordmotion',
    'kana/vim-textobj-user',
    'kana/vim-textobj-entire',
    'idbrii/textobj-word-column.vim',
  }
  use 'numToStr/Comment.nvim'
  -- Tim pope essentials
  use {
    'tpope/vim-repeat',
    'tpope/vim-sleuth',
    'tpope/vim-dispatch'
  }
  -- Directory viewer
  use 'justinmk/vim-dirvish'
  -- Show leader key bindings
  use 'folke/which-key.nvim'
  --Toggle terminal
  use 'akinsho/toggleterm.nvim'
  -- Take care of sudo
  use 'lambdalisue/suda.vim'
  -- Alignment
  use 'junegunn/vim-easy-align'
  use 'nvim-lua/plenary.nvim'
  use {
    'jose-elias-alvarez/nvim-lsp-ts-utils',
    requires = { 'jose-elias-alvarez/null-ls.nvim' }
  }
  -- LSP
  use {
    'neovim/nvim-lspconfig',
    'kosayoda/nvim-lightbulb',
  }
  -- Language support & syntax highlighting
  use 'simrat39/rust-tools.nvim'
  -- Coq
  use {
    'whonore/Coqtail',
    'jlapolla/vim-coq-plugin'
  }
  -- treesitter based syntax highlighting
  use {
    'nvim-treesitter/nvim-treesitter',
    requires = {
      {
        "nvim-treesitter/playground",
        after = "nvim-treesitter",
        cmd   = { "TSPlaygroundToggle", "TSHighlightCapturesUnderCursor" },
      },
      {
        "nvim-treesitter/nvim-treesitter-textobjects",
        module = "nvim-treesitter-textobjects",
        after = "nvim-treesitter",
      },
    },
    config = "require('treesitter')",
    run    = ':TSUpdate'
  }
  -- All writing needs
  use 'lervag/vimtex'
  use 'vim-pandoc/vim-pandoc'
  use 'vim-pandoc/vim-pandoc-syntax'
  -- Dhall
  use 'vmchale/dhall-vim'
  -- For statusline
  use {
    'NTBBloodbath/galaxyline.nvim',
    requires = { 'kyazdani42/nvim-web-devicons' }
  }
  -- Marks and registers
  use {
    'chentau/marks.nvim',
  }
end

return require('packer').startup(init)
