{ pkgs, ... }:

{
  programs.neovim = {
    enable = true;
    withRuby = false;
    withPython3 = false;
    defaultEditor = true;
    extraLuaPackages = ps: [ ps.magick ];
    extraPackages = [
      pkgs.ueberzugpp
      pkgs.imagemagick
    ];

    plugins = with pkgs.vimPlugins; [
      neo-tree-nvim
      catppuccin-nvim
      tokyonight-nvim
      nvim-lspconfig
      nvim-cmp
      cmp-nvim-lsp
      cmp-buffer
      cmp-path
      plenary-nvim
      telescope-nvim
      (nvim-treesitter.withAllGrammars)
      vim-nix
      lualine-nvim
      image-nvim
    ];

    initLua = ''
        vim.cmd("colorscheme catppuccin-mocha")
        -- Basic settings
        vim.o.number = true
        vim.o.relativenumber = true

        -- =========================
        -- LSP (Neovim 0.11+ way)
        -- =========================

        -- Add cmp capabilities
        local capabilities = require("cmp_nvim_lsp").default_capabilities()

        vim.lsp.config("nil_ls", {
          capabilities = capabilities,
        })

        -- PHP LSP
        vim.lsp.config("intelephense", {
          capabilities = capabilities,
        })

        vim.lsp.enable("intelephense")


        vim.lsp.enable("nil_ls")

        -- =========================
        -- nvim-cmp
        -- =========================

        local cmp = require("cmp")

        cmp.setup({
          mapping = cmp.mapping.preset.insert({
            ["<C-Space>"] = cmp.mapping.complete(),
            ["<CR>"] = cmp.mapping.confirm({ select = true }),
          }),
          sources = {
            { name = "nvim_lsp" },
            { name = "buffer" },
            { name = "path" },
          }
        })

        -- =========================
        -- Telescope
        -- =========================

        local builtin = require("telescope.builtin")
        vim.keymap.set("n", "<leader>ff", builtin.find_files, {})
        vim.keymap.set("n", "<leader>fg", builtin.live_grep, {})

        -- =========================
        -- Lualine (status line with Git branch)
        -- =========================
        require('lualine').setup {
          options = {
            theme = 'catppuccin',  -- match your colorscheme
            section_separators = {'', ''},
            component_separators = {'', ''},
          },
          sections = {
            lualine_a = {'mode'},
            lualine_b = {'branch'},  -- shows Git branch here
            lualine_c = {'filename'},
            lualine_x = {'encoding', 'fileformat', 'filetype'},
            lualine_y = {'progress'},
            lualine_z = {'location'}
          }
        }

        -- =========================
        -- image-nvim
        -- ========================= 
        require("image").setup({
          backend = "ueberzug", -- or "ueberzug" or "sixel"
          processor = "magick_cli", -- or "magick_rock"
          integrations = {
          markdown = {
            enabled = true,
            clear_in_insert_mode = false,
            download_remote_images = true,
            only_render_image_at_cursor = false,
            only_render_image_at_cursor_mode = "popup", -- or "inline"
            floating_windows = false, -- if true, images will be rendered in floating markdown windows
            filetypes = { "markdown", "vimwiki" }, -- markdown extensions (ie. quarto) can go here
          },
          asciidoc = {
            enabled = true,
            clear_in_insert_mode = false,
            download_remote_images = true,
            only_render_image_at_cursor = false,
            only_render_image_at_cursor_mode = "popup",
            floating_windows = false,
            filetypes = { "asciidoc", "adoc" },
          },
          neorg = {
            enabled = true,
            filetypes = { "norg" },
          },
          rst = {
            enabled = true,
          },
          typst = {
            enabled = true,
            filetypes = { "typst" },
          },
          html = {
            enabled = false,
          },
          css = {
            enabled = false,
          },
        },
        max_width = nil,
        max_height = nil,
        max_width_window_percentage = nil,
        max_height_window_percentage = 50,
        scale_factor = 1.0,
        window_overlap_clear_enabled = false, -- toggles images when windows are overlapped
        window_overlap_clear_ft_ignore = { "cmp_menu", "cmp_docs", "snacks_notif", "scrollview", "scrollview_sign" },
        editor_only_render_when_focused = false, -- auto show/hide images when the editor gains/looses focus
        tmux_show_only_in_active_window = false, -- auto show/hide images in the correct Tmux window (needs visual-activity off)
        hijack_file_patterns = { "*.png", "*.jpg", "*.jpeg", "*.gif", "*.webp", "*.avif" }, -- render image files as images when opened
      })

    '';
  };
}
