#
# Neovim
#

{ pkgs, ... }:

{
  programs = {
    neovim = {
      enable = true;
      viAlias = true;
      vimAlias = true;
      vimdiffAlias = true;
      withNodeJs = true;

#      plugins = with pkgs.vimPlugins; [
#
#        # Syntax
#        #vim-nix
#        #vim-markdown
#
#        # Quality of life
#        vim-lastplace         # Opens document where you left it
#        auto-pairs            # Print double quotes/brackets/etc.
#        vim-gitgutter         # See uncommitted changes of file :GitGutterEnable
#
#        # File Tree
#        nerdtree              # File Manager - set in extraConfig to F6
#	
#        # Customization 
#        wombat256-vim         # Color scheme for lightline
#        srcery-vim            # Color scheme for text
#
#        lightline-vim         # Info bar at bottom
#        indent-blankline-nvim # Indentation lines
#
#        # Syntax
#        nvim-treesitter.withAllGrammars
#        # finder
#        telescope-nvim
#        # completion
#        nvim-cmp
#        # status line
#        lualine-nvim
#        # indent
#        indent-blankline-nvim
#      ];

      extraPackages = with pkgs; [
        ripgrep
        fd
        nodejs
        nodePackages.npm
      ];

#      extraConfig = ''
#        set expandtab
#        set shiftwidth=4
#        set tabstop=4
#      '';

#      extraLuaConfig = ''
#          vim.g.mapleader = ' '
#          vim.g.maplocalleader = ' '
#
#          -- Set highlight on search
#          vim.o.hlsearch = false
#          
#          -- Make line numbers default
#          vim.wo.number = true
#          
#          -- Enable mouse mode
#          vim.o.mouse = 'a'
#          
#          -- Sync clipboard between OS and Neovim.
#          --  Remove this option if you want your OS clipboard to remain independent.
#          --  See `:help 'clipboard'`
#          vim.o.clipboard = 'unnamedplus'
#          
#          -- Enable break indent
#          vim.o.breakindent = true
#          
#          -- Save undo history
#          vim.o.undofile = true
#          
#          -- Case insensitive searching UNLESS /C or capital in search
#          vim.o.ignorecase = true
#          vim.o.smartcase = true
#          
#          -- Keep signcolumn on by default
#          vim.wo.signcolumn = 'yes'
#          
#          -- Decrease update time
#          vim.o.updatetime = 250
#          vim.o.timeout = true
#          vim.o.timeoutlen = 300
#          
#          -- Set completeopt to have a better completion experience
#          vim.o.completeopt = 'menuone,noselect'
#          
#          -- NOTE: You should make sure your terminal supports this
#          vim.o.termguicolors = true
#
#          -- [[ Highlight on yank ]]
#          -- See `:help vim.highlight.on_yank()`
#          local highlight_group = vim.api.nvim_create_augroup('YankHighlight', { clear = true })
#          vim.api.nvim_create_autocmd('TextYankPost', {
#            callback = function()
#              vim.highlight.on_yank()
#            end,
#            group = highlight_group,
#            pattern = '*',
#          })
#          
#          -- [[ Configure Telescope ]]
#          -- See `:help telescope` and `:help telescope.setup()`
#          require('telescope').setup {
#            defaults = {
#              mappings = {
#                i = {
#                  ['<C-u>'] = false,
#                  ['<C-d>'] = false,
#                },
#              },
#            },
#          }
#          
#          -- Enable telescope fzf native, if installed
#          pcall(require('telescope').load_extension, 'fzf')
#          
#          -- See `:help telescope.builtin`
#          vim.keymap.set('n', '<leader>?', require('telescope.builtin').oldfiles, { desc = '[?] Find recently opened files' })
#          vim.keymap.set('n', '<leader><space>', require('telescope.builtin').buffers, { desc = '[ ] Find existing buffers' })
#          vim.keymap.set('n', '<leader>/', function()
#            -- You can pass additional configuration to telescope to change theme, layout, etc.
#            require('telescope.builtin').current_buffer_fuzzy_find(require('telescope.themes').get_dropdown {
#              winblend = 10,
#              previewer = false,
#            })
#          end, { desc = '[/] Fuzzily search in current buffer' })
#          
#          vim.keymap.set('n', '<leader>gf', require('telescope.builtin').git_files, { desc = 'Search [G]it [F]iles' })
#          vim.keymap.set('n', '<leader>sf', require('telescope.builtin').find_files, { desc = '[S]earch [F]iles' })
#          vim.keymap.set('n', '<leader>sh', require('telescope.builtin').help_tags, { desc = '[S]earch [H]elp' })
#          vim.keymap.set('n', '<leader>sw', require('telescope.builtin').grep_string, { desc = '[S]earch current [W]ord' })
#          vim.keymap.set('n', '<leader>sg', require('telescope.builtin').live_grep, { desc = '[S]earch by [G]rep' })
#          vim.keymap.set('n', '<leader>sd', require('telescope.builtin').diagnostics, { desc = '[S]earch [D]iagnostics' })
#          require("indent_blankline").setup {
#              -- for example, context is off by default, use this to turn it on
#              show_current_context = true,
#              show_current_context_start = true,
#          }
#      '';
    };
  };
}