{ pkgs, ... }:

{
  programs.nixvim = {
    enable = true;
    opts = import ./opts.nix;
    globals = import ./globals.nix;
    plugins = {
      treesitter = import ./setup/treesitter.nix;
      telescope = import ./setup/telescope.nix;
      alpha = import ./setup/alpha.nix;
      barbar = import ./setup/barbar.nix;
      nvim-autopairs = import ./setup/autopairs.nix;
      copilot-lua = import ./setup/copilot.nix;
      lualine = import ./setup/lualine.nix;

      transparent = import ./setup/transparent.nix;

      luasnip.enable = true;
      cmp-nvim-lsp.enable = true;
      lsp = import ./setup/lsp.nix;
      cmp = import ./setup/cmp.nix;

      indent-blankline.enable = true;
      surround.enable = true;
      which-key.enable = true;
      comment.enable = true;
      fidget.enable = true;
      fidget.notification.window.winblend = 0;
    };

    keymaps = import ./keymaps.nix;

    extraPlugins = [
      (import ./extraPlugins/edge.nix { inherit pkgs; })
      (import ./extraPlugins/typst-preview.nix { inherit pkgs; })
      pkgs.vimPlugins.guess-indent-nvim
    ];

    colorscheme = "edge";
    extraConfigLua =
      (builtins.readFile ./extraLua/alpha_theme.lua)
      + (builtins.readFile ./extraLua/wos.lua)
      + (builtins.readFile ./extraLua/typst.lua)
      + (builtins.readFile ./extraLua/guess-indent.lua)
      + (builtins.readFile ./extraLua/typst-preview.lua);
    # + "require('transparent').clear_prefix('lualine')";
  };
}