# Neovim configuration for Nix
{ inputs, ... }:

{
  imports = [
    inputs.nixvim.homeManagerModules.nixvim
  ];

  catppuccin.nvim.enable = true;

  home.sessionVariables.EDITOR = "nvim";

  programs.nixvim = {
    enable = true;
    clipboard.providers.wl-copy.enable = true;
    colorschemes.catppuccin.enable = true;
    defaultEditor = true;
    vimdiffAlias = true; # Alias vimdiff to nvim -d

    opts = {
      number = true; # Show line numbers
      relativenumber = true; # Show relative line numbers

      shiftwidth = 2; # Tab width should be 2
    };

    plugins = {
      bufferline.enable = false;

      # Formatters
      conform-nvim = {
        enable = true;
        # TODO use nix fmt on save
        settings = { };
      };

      lsp = {
        enable = true;
        servers = {
          nixd.enable = true;
        };
      };

      lualine.enable = true;
      luasnip.enable = true;

      # Completions
      cmp = {
        enable = true;

        autoEnableSources = true;

        # TODO complete on <tab>
        settings = {
          sources = [
            { name = "nvim-lsp"; }
            { name = "path"; }
            { name = "buffer"; }
          ];
        };
      };

      treesitter.enable = true;
      web-devicons.enable = true;
    };

    extraConfigLua = ''
      -- Translucent background
      vim.cmd [[
        highlight Normal guibg=none
        highlight NonText guibg=none
        highlight Normal ctermbg=none
        highlight NonText ctermbg=none
      ]]
    '';
  };
}
