if vim.fn.has "nvim-0.8" == 0 then error "Need Neovim 0.8+ in order to use this config" end

for _, cmd in ipairs { "git", "rg", { "fd", "fdfind" } } do
  local name = type(cmd) == "string" and cmd or vim.inspect(cmd)
  local commands = type(cmd) == "string" and { cmd } or cmd
  ---@cast commands string[]
  local found = false

  for _, c in ipairs(commands) do
    if vim.fn.executable(c) == 1 then
      name = c
      found = true
    end
  end

  if not found then error(("`%s` is not installed"):format(name)) end
end

-- require('nvim-treesitter.configs').setup {
--   ensure_installed = { 'latex', 'bibtex', 'comment' },
--   highlight = { enable = true },
-- }

vim.g.vimtex_view_method = 'zathura' -- change to 'skim' (mac) or 'sumatrapdf' (win)
vim.g.vimtex_compiler_method = 'latexmk'
vim.g.vimtex_compiler_latexmk = {
  build_dir = '',
  options = { '-pdf', '-interaction=nonstopmode', '-synctex=1', '-file-line-error' },
}


-- forward/back search mappings
vim.g.vimtex_view_forward_search_on_start = 1
-- keymaps to compile/view (vimtex provides defaults: \ll, \lv, \li)
vim.api.nvim_set_keymap('n', '<leader>ll', '<cmd>VimtexCompile<CR>', { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<leader>lv', '<cmd>VimtexView<CR>', { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<leader>lk', '<cmd>VimtexStop<CR>', { noremap = true, silent = true })

-- LSP: texlab (you need texlab installed OR fall back to vimtex)
-- local nvim_lsp = require('lspconfig')


-- Basic nvim-cmp setup (LSP completion)

vim.g.python3_host_prog = '/home/manuel/.conda/envs/sci/bin/python3'
vim.g.tidal_target = "terminal"

vim.opt.termguicolors = true -- enable 24-bit RGB colors
-- Disable annoying deprecated message
vim.deprecate = function() end

-- bootstrap lazy and all plugins
local lazypath = vim.fn.stdpath "data" .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
  vim.fn.system {
    "git",
    "clone",
    "--filter=blob:none",
    "https://github.com/folke/lazy.nvim.git",
    "--branch=stable", -- latest stable release
    lazypath,
  }
end
vim.opt.rtp:prepend(lazypath)

-- Load default configurations and plugins
for _, source in ipairs {
  "plugins",
  "options",
  "mappings",
  "autocmds",
} do
  local ok, fault = pcall(require, source)
  if not ok then vim.api.nvim_err_writeln("Failed to load " .. source .. "\n\n" .. fault) end
end

-- Load custom configurations
local exist, custom = pcall(require, "custom")
if exist and type(custom) == "table" and custom.configs then custom.configs() end


vim.opt.linebreak = true
vim.opt.breakat = " \t"
