{ pkgs, inputs, ... }:
{
  home = {
    sessionVariables = {
      EDITOR = "nvim";
    };
  };

  imports = [
    ./options.nix
    ./plugins.nix
    ./keys.nix
  ];

  programs.nixvim = {
    enable = true;
    globals.mapleader = " ";
    globals.maplocalleader = " ";

    viAlias = true;
    vimAlias = true;

    # Highlight and remove extra white spaces
    # same color as cursorline as per
    # https://github.com/joshdick/onedark.vim/blob/390b893d361c356ac1b00778d849815f2aa44ae4/autoload/onedark.vim
    highlight.ExtraWhitespace.bg = "#2C323C";
    match.ExtraWhitespace = "\\s\\+$";

    clipboard.providers.wl-copy.enable = true;

    performance = {
      byteCompileLua.enable = true;
      combinePlugins = {
        enable = true;

        standalonePlugins = [
          # clashes with lualine
          "onedark.nvim"
        ];
      };
    };

    extraLuaPackages = ps: [ ps.magick ];
    extraPackages = [ pkgs.imagemagick ];

    # package = (import inputs.unstable { inherit (pkgs) system; }).neovim-unwrapped;
    package = pkgs.neovim-unwrapped;

    colorschemes.onedark = {
      enable = true;
      settings = {
        style = "deep";

        highlights = {
          # bright green doccomments
          "@lsp.type.comment".fg = "#77B767";
          "@comment.documentation.rust".fg = "#77B767";
          "@comment.documentation".fg = "#77B767";
          "@comment".fg = "#426639";
          # "Visual".bg = "#2a2e36";
          # "Cursorline".bg = "#2a2e36";
        };

      };
    };

    extraConfigLuaPre = ''
      require("neoconf").setup({})
    '';
    extraConfigLua =
      ''
        require("render-markdown").setup {
          latex_converter = '${pkgs.python312Packages.pylatexenc}/bin/latex2text',
        }
      ''

      #   local lspconfig = require 'lspconfig'
      #   local configs = require 'lspconfig.configs'
      #   if not configs.foo_lsp then
      #     configs.noteslsp = {
      #       default_config = {
      #         -- cmd = {'${pkgs.custom.noteslsp}/bin/noteslsp'},
      #         cmd = {'./noteslsp/target/debug/noteslsp'},
      #         filetypes = {'markdown'},
      #         root_dir = function(fname)
      #           return lspconfig.util.find_git_ancestor(fname)
      #         end,
      #         settings = {}
      #         ,
      #       },
      #     }
      #   end
      #
      #   lspconfig.noteslsp.setup{}
      # ''
      + (builtins.readFile ./config.lua);

  };
}
