wezterm.on('user-var-changed', function(window, pane, name, value)
  local overrides = window:get_config_overrides() or {}
  if name == "ZEN_MODE" then
    local incremental = value:find("+")
    local number_value = tonumber(value)
    if incremental ~= nil then
      while (number_value > 0) do
        window:perform_action(wezterm.action.IncreaseFontSize, pane)
        number_value = number_value - 1
      end
      overrides.enable_tab_bar = false
    elseif number_value < 0 then
      window:perform_action(wezterm.action.ResetFontSize, pane)
      overrides.font_size = nil
      overrides.enable_tab_bar = true
    else
      overrides.font_size = number_value
      overrides.enable_tab_bar = false
    end
  end
  window:set_config_overrides(overrides)
end)

wezterm.on('format-window-title', function(tab, tabs)
  local zoomed = ""

  if tab.active_pane.is_zoomed then
    zoomed = '[Z] '
  end

  local index = ""

  if #tabs > 1 then
    index = string.format('[%d/%d] ', tab.tab_index + 1, #tabs)
  end

  return 'WezTerm - ' .. zoomed .. index .. tab.active_pane.title
end)

local c = wezterm.config_builder()

wezterm.plugin.require('https://github.com/nekowinston/wezterm-bar').apply_to_config(c, {
  position = 'bottom',
  max_width = 32,
  dividers = 'slant_right',
  indicator = {
    leader = {
      enabled = true,
      off = ' ',
      on = ' ',
    },
    mode = {
      enabled = true,
      names = {
        resize_mode = 'RESIZE',
        copy_mode = 'VISUAL',
        search_mode = 'SEARCH',
      },
    },
  },
  tabs = {
    numerals = 'arabic',
    pane_count = 'subscript',
    brackets = {
      active = { "", ':' },
      inactive = { "", ':' },
    },
  },
  clock = {
    enabled = true,
    format = '%l:%M %p',
  },
})

local act = wezterm.action

local keybinds = {
  {
    key = 'Enter',
    mods = 'CTRL|SHIFT',
    action = act.SplitHorizontal({ domain = 'CurrentPaneDomain' }),
  },
  {
    key = 'h',
    mods = 'CTRL|SHIFT',
    action = act.ActivatePaneDirection('Left'),
  },
  {
    key = 'l',
    mods = 'CTRL|SHIFT',
    action = act.ActivatePaneDirection 'Right',
  },
  {
    key = 'k',
    mods = 'CTRL|SHIFT',
    action = act.ActivatePaneDirection 'Up',
  },
  {
    key = 'j',
    mods = 'CTRL|SHIFT',
    action = act.ActivatePaneDirection 'Down',
  },
  {
    key = 't',
    mods = 'CTRL|SHIFT',
    action = act.SpawnCommandInNewTab { cwd = wezterm.home_dir },
  }
}

local config = {
  adjust_window_size_when_changing_font_size = false,
  color_scheme = 'Catppuccin Mocha',
  cursor_blink_ease_in = 'Constant',
  cursor_blink_ease_out = 'Constant',
  cursor_blink_rate = 500,
  default_cursor_style = 'BlinkingBar',
  enable_kitty_graphics = true,
  enable_scroll_bar = false,
  enable_wayland = false,
  font_size = 12,
  font = wezterm.font('Maple Mono NF'),
  front_end = 'OpenGL',
  initial_cols = 160,
  keys = keybinds,
  underline_position = -4,
  use_fancy_tab_bar = false,
  warn_about_missing_glyphs = false,
  window_background_opacity = 0.8,
  window_padding = { left = 0, right = 0, top = 0, bottom = 0 },
}

for k, v in pairs(config) do
  c[k] = v
end

return c
