return require('packer').startup(function()
	-- Packer can manage itself
	use 'wbthomason/packer.nvim'

	-- colorschemes
	use 'gruvbox-community/gruvbox'
    use 'bluz71/vim-moonfly-colors'

	use { 'neoclide/coc.nvim', run = 'yarn install', disable = true }

    use { 'SirVer/ultisnips' }

    use { 'rcarriga/nvim-notify' }

    use {
        "neovim/nvim-lspconfig",
        event = "BufReadPre",
        wants = { "cmp-nvim-lsp", "nvim-lsp-installer", "lsp_signature.nvim" },
        config = function()
            require("config.lsp").setup()
        end,
        requires = {
            "williamboman/nvim-lsp-installer",
            "ray-x/lsp_signature.nvim",
        },
    }

    use {
        "ray-x/lsp_signature.nvim",
    }

    use {
        "hrsh7th/nvim-cmp",
         event = "InsertEnter",
        requires = {
            { "hrsh7th/cmp-nvim-lsp", after = "nvim-cmp" },
            { "f3fora/cmp-spell", after = "nvim-cmp" },
            { "hrsh7th/cmp-path", after = "nvim-cmp" },
            { "hrsh7th/cmp-buffer", after = "nvim-cmp" },
            { "hrsh7th/cmp-calc", after = "nvim-cmp" },
            { "quangnguyen30192/cmp-nvim-ultisnips", after = "nvim-cmp" },
            {
                "L3MON4D3/LuaSnip",
                -- after = 'nvim-cmp',
                wants = "friendly-snippets",
                requires = {
                    {  "rafamadriz/friendly-snippets", after = 'nvim-cmp' },
                },
                config = function()
                    require("config.luasnip").setup()
                end,
            },

        },
        config = function()
            require("config.cmp").setup()
        end,
        disable = false,
    }

    use {
        'tpope/vim-fugitive',
    }

    use 'nvim-lua/popup.nvim'
	use 'nvim-lua/plenary.nvim'
	use {
        'nvim-telescope/telescope.nvim',
        config = function()
            require('config.telescope')
        end
    }
	use 'nvim-telescope/telescope-fzy-native.nvim'

	use {
        'Rican7/php-doc-modded',
        config = function()
            require('config.php-doc')
        end
    }

	use 'dart-lang/dart-vim-plugin'

    use { 'nvim-treesitter/nvim-treesitter' }

    -- use {
    --     'romgrk/barbar.nvim',
    --     requires = {'kyazdani42/nvim-web-devicons'},
    --     config = function()
    --         require('config.barbar')
    --     end
    -- }

    use {
        'lewis6991/gitsigns.nvim',
        config = function()
            require('config.gitsigns')
        end
    }

    use {
        'nvim-lualine/lualine.nvim',
        requires = { 'kyazdani42/nvim-web-devicons', opt = true },
        config = function()
            require('config.lualine')
        end
    }


    use {
        'crispgm/nvim-go',
        config = function ()
            require('config.nvim-go')
        end
    }

    use {
        'aserowy/tmux.nvim',
        config = function ()
            require('config.tmux')
        end
    }

    use {
        "nvim-neo-tree/neo-tree.nvim",
        branch = "v2.x",
        requires = {
            "nvim-lua/plenary.nvim",
            "kyazdani42/nvim-web-devicons", -- not strictly required, but recommended
            "MunifTanjim/nui.nvim",
        },
        config = function ()
            require('config.nvim-neo-tree')
        end
    }

    -- use {
    --     "startup-nvim/startup.nvim",
    --     requires = {"nvim-telescope/telescope.nvim", "nvim-lua/plenary.nvim"},
    --     config = function()
    --         require"startup".setup()
    --     end
    -- }

    -- Local nvim plugin development
    -- use '~/Software/nvim-phpdoc/phpdoc.nvim'
end)
