local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"

if not (vim.uv or vim.loop).fs_stat(lazypath) then
    vim.fn.system({
        "git",
        "clone",
        "--filter=blob:none",
        "https://github.com/folke/lazy.nvim.git",
        "--branch=stable",
        lazypath,
    })
end
vim.opt.rtp:prepend(vim.env.LAZY or lazypath)

require("lazy").setup({
    spec = {
        { "LazyVim/LazyVim", import = "lazyvim.plugins" },
        { import = "lazyvim.plugins.extras.coding.copilot" },
        { import = "lazyvim.plugins.extras.coding.copilot-chat" },
        { import = "lazyvim.plugins.extras.coding.mini-surround" },
        { import = "lazyvim.plugins.extras.coding.neogen" },
        { import = "lazyvim.plugins.extras.dap.core" },
        { import = "lazyvim.plugins.extras.editor.dial" },
        { import = "lazyvim.plugins.extras.editor.illuminate" },
        { import = "lazyvim.plugins.extras.editor.refactoring" },
        { import = "lazyvim.plugins.extras.formatting.prettier" },
        { import = "lazyvim.plugins.extras.formatting.black" },
        { import = "lazyvim.plugins.extras.lang.ansible" },
        { import = "lazyvim.plugins.extras.lang.docker" },
        { import = "lazyvim.plugins.extras.lang.git" },
        { import = "lazyvim.plugins.extras.lang.gleam" },
        { import = "lazyvim.plugins.extras.lang.helm" },
        { import = "lazyvim.plugins.extras.lang.json" },
        { import = "lazyvim.plugins.extras.lang.markdown" },
        { import = "lazyvim.plugins.extras.lang.php" },
        { import = "lazyvim.plugins.extras.lang.python" },
        { import = "lazyvim.plugins.extras.lang.rust" },
        { import = "lazyvim.plugins.extras.lang.sql" },
        { import = "lazyvim.plugins.extras.lang.terraform" },
        { import = "lazyvim.plugins.extras.lang.toml" },
        { import = "lazyvim.plugins.extras.lang.yaml" },
        { import = "lazyvim.plugins.extras.lsp.neoconf" },
        { import = "lazyvim.plugins.extras.test.core" },
        { import = "lazyvim.plugins.extras.ui.mini-indentscope" },
        { import = "plugins" },
    },
    defaults = {
        lazy = true,
        version = false,
    },
    install = { colorscheme = { "tokyonight" } },
    checker = { enabled = true },
    performance = {
        rtp = {
            disabled_plugins = {
                "gzip",
                -- "matchit",
                "matchparen",
                "netrwPlugin",
                "tarPlugin",
                "tohtml",
                "tutor",
                "zipPlugin",
            },
        },
    },
})

for _, autocmd in ipairs({
    { -- Automatically change line numeration
        { "BufEnter", "FocusGained", "InsertLeave", "WinEnter" },
        { command = 'if &nu && mode() != "i" | set rnu | endif' },
    },
    { -- Automatically change line numeration
        { "BufLeave", "FocusLost", "InsertEnter", "WinLeave" },
        { command = "if &nu | set nornu | endif" },
    },
    { -- Trigger shortcuts script
        "BufWritePost",
        { pattern = { "directories", "files" }, command = "silent!!shortcuts" },
    },
    { -- Trigger xrdb
        "BufWritePost",
        { pattern = { "xresources" }, command = "silent!!xrdb %" },
    },
}) do
    vim.api.nvim_create_autocmd(autocmd[1], autocmd[2])
end