{ config, lib, pkgs, ... }:

{
  config = {

    environment.variables.EDITOR = "nvim";

    home-manager.users.${config.user} = {
      programs.neovim = {

        enable = true;

        viAlias = true;
        vimAlias = true;

        extraLuaConfig = lib.fileContents ../../../files/config/nvim/init.lua;

        plugins = with pkgs.vimPlugins; [
          # Deoendencies
          vim-devicons
          nvim-web-devicons
          # Lua functions
          plenary-nvim
          # Lines
          lualine-nvim # mode line
          bufferline-nvim # buffer line
          # Menus
          nvim-tree-lua # file browser
          undotree # undo menu
          trouble-nvim # error menu
          telescope-nvim # grep/find menus
          # Integrations
          vim-fugitive # git
          # Snippets
          vim-vsnip
          vim-vsnip-integ
          friendly-snippets
          # Completion
          nvim-cmp
          cmp-buffer
          cmp-nvim-lsp
          cmp-vsnip
          nvim-surround # delimiter
          # Lsp
          nerdcommenter # comment functions
          nvim-treesitter.withAllGrammars # hilighting
          vim-illuminate # hilighting
          todo-comments-nvim # todo comments
          catppuccin-nvim # theme
          nvim-lspconfig # lsp server
          fidget-nvim # notifications
          indent-o-matic # auto indentation
          hologram-nvim # images
          virt-column-nvim # 80 col line
        ];
      };
    };

  };
}