local bootstrap = require('bootstrap')

local function import(name)
    return ([[require '%s']]):format(name)
end

return require('packer').startup({
    function(use)
        use { 
		'wbthomason/packer.nvim'
	}

        use {
		'RRethy/base16-nvim',
	}

        use {
            'vim-airline/vim-airline',
            requires = {
                'ryanoasis/vim-devicons',
            },
        }

        use {
            'mustache/vim-mustache-handlebars',
        }

        use {
            'whonore/Coqtail',
        }

        use {
            'Julian/lean.nvim',
            requires = {
                'nvim-lua/plenary.nvim',
            },
            config = function()
                require("lean").setup({
                    opts = { mappings = true }
                })
            end
        }

        use {
            'noir-lang/noir-nvim',
        }

        use {
            'nvim-treesitter/nvim-treesitter',
            run = ':TSUpdate',
            config = function()
                require("nvim-treesitter.configs").setup({
                    highlight = { enable = true, disable = { "latex", "ipkg", "markdown", "md" } },
                    indent = { enable = true, disable = { "markdown", "md" } },
                    ensure_installed = {},
                    ignore_install = { "ipkg", "markdown", "md" },

                })
            end
        }

        use {
            'petRUShka/vim-sage',
        }

        use {
            'evanleck/vim-svelte',
        }

        use {
            'wuelnerdotexe/vim-astro',
        }

        use {
            'tpope/vim-fugitive',
            config = function()
                local map = vim.api.nvim_set_keymap
                map('n', '<Leader>g', '<Cmd>Git<CR>', { noremap = true })
            end,
        }

        use {
            'tpope/vim-surround',
        }

        use {
            'tpope/vim-repeat',
        }

	use {
	    'nvim-lua/plenary.nvim',
	}

        use {
            'lewis6991/gitsigns.nvim',
            requires = {
                'nvim-lua/plenary.nvim'
            },
            config = function()
                require('gitsigns').setup {
                    signs = {
                        add          = {
                            text = '│',
                        },
                        change       = {
                            text = '│',
                        },
                        delete       = {
                            text = '_',
                        },
                        topdelete    = {
                            text = '‾',
                        },
                        changedelete = {
                            text = '~',
                        },
                    },
                }
            end
        }

        use {
            'akinsho/flutter-tools.nvim',
            requires = {
                'nvim-lua/plenary.nvim'
            },
            config = function()
                require('flutter-tools').setup {
                    -- lsp = {
                    --     color = {
                    --         enabled = false
                    --     }
                    -- }
                }
            end
        }

        use {
            'numToStr/Comment.nvim',
            config = function()
                local map = vim.api.nvim_set_keymap
                require('Comment').setup({})
                map('n', '<C-_>',
                    '<Cmd>lua require("Comment.api").toggle_linewise_op(vim.fn.visualmode())<CR>',
                    { noremap = true, silent = true })
            end
        }

        use {
            'nvim-telescope/telescope.nvim',
            requires = {
                'nvim-lua/plenary.nvim',
                {
                    'nvim-telescope/telescope-fzf-native.nvim',
                    run = 'make',
                },
                'nvim-telescope/telescope-symbols.nvim',
            },
            config = import('tel'),
        }

        use {
            'stevearc/dressing.nvim',
            config = function()
                require('dressing').setup({
                    input = {
                        default_prompt = '❯',
                        win_options = {
                            winhighlight = 'NormalFloat:Normal',
                        },
                    },
                })
                vim.cmd [[highlight link FloatTitle NonText]]
                vim.cmd [[highlight link DressingInputText Normal]]
            end,
        }

        use {
            'antoinemadec/FixCursorHold.nvim',
            config = function()
                vim.g.cursorhold_updatetime = 500
            end,
        }

        use {
            'sirver/ultisnips',
            ft = { 'latex', 'plaintex', 'tex' },
            config = function()
                vim.g.UltiSnipsExpandTrigger = '<tab>'
                vim.g.UltiSnipsJumpForwardTrigger = '<c-h>'
                vim.g.UltiSnipsJumpBackwardTrigger = '<c-b>'
            end
        }

        use {
            'neovim/nvim-lspconfig',
	    disable = true,
            -- commit = "607ff48b970b89c3e4e3825b88d9cfd05b7aaea5",
            requires = {
                'nvim-lua/lsp-status.nvim',
                {
                    'ms-jpq/coq.thirdparty',
                },
                {
                    'ms-jpq/coq_nvim',
                    run = ':COQdeps',
                    requires = {
                        'ms-jpq/coq.artifacts',
                    },
                },
                --                 {
                --                     'jose-elias-alvarez/null-ls.nvim',
                --                     requires = {
                --                         'nvim-lua/plenary.nvim',
                --                     },
                --                 },
            },
            config = import('lsp'),
        }

        use {
            'lervag/vimtex',
            config = function()
                vim.g.vimtex_view_general_viewer = 'zathura'
                vim.g.vimtex_compiler_method = "latexmk"
                -- vim.g.vimtex_view_general_options = = '-x nvim -n -c "Vimtex'
                -- 'file:@pdf\\#src:@line@tex'
                -- vim.g.vimtex_quickfix_enabled = 0
                -- vim.g.Tex_GotoError = 0
                -- vim.g.Tex_ShowErrorContext = 0
            end,
        }

        use {
            'iamcco/markdown-preview.nvim',
            run = "cd app && npm install",
            setup = function() vim.g.mkdp_filetypes = { "markdown" } end, ft = { "markdown" },
            config = function()
                local map = vim.api.nvim_set_keymap
                map('n', '<C-m>', '<Plug>MarkdownPreviewToggle', {})
                map('n', '<Leader>m', '<Plug>MarkdownPreviewToggle', {})
                vim.g.mkdp_markdown_css = os.getenv("HOME") .. "/.config/nvim/lua/markdownStyle.css"
                vim.g.mkdp_highlight_css = os.getenv("HOME") .. "/.cache/wal/colors.css"
            end
        }

        if bootstrap.is_bootstrap then
            require('packer').sync()
        end
    end,
    config = {
        compile_path = require('packer.util').join_paths(vim.fn.stdpath('data'), 'site', 'plugin', 'packer_compiled.lua'),
    }
})
