{ config, pkgs, ... }: {
  programs.neovim = {
    enable = true;
    defaultEditor = true;
    viAlias = true;
    vimAlias = true;
    vimdiffAlias = true;
    
    plugins = with pkgs.vimPlugins; [ 
      vim-airline
      YouCompleteMe
      tabnine-vim
      rainbow

      # Themes
      vim-airline-themes
      nord-vim
      gruvbox
      tokyonight-nvim

      # https://github.com/figsoda/cfg/blob/main/src/programs/neovim/configure/packages.nix
      bufferline-nvim
      cmp-buffer
      cmp-cmdline
      cmp-dap
      cmp-nvim-lsp
      cmp-nvim-lsp-document-symbol
      cmp-path
      cmp_luasnip
      comment-nvim
      crates-nvim
      dressing-nvim
      gitsigns-nvim
      indent-blankline-nvim
      leap-nvim
      lspkind-nvim
      lualine-nvim
      luasnip
      neo-tree-nvim
      nix-develop-nvim
      noice-nvim
      null-ls-nvim
      numb-nvim
      nvim-cmp
      nvim-colorizer-lua
      nvim-dap
      nvim-dap-ui
      nvim-lspconfig
      nvim-navic
      nvim-notify
      nvim-treesitter-textobjects
      nvim-treesitter.withAllGrammars
      nvim-web-devicons
      nvim_context_vt
      playground
      refactoring-nvim
      ron-vim
      rust-tools-nvim
      telescope-fzf-native-nvim
      telescope-nvim
      trouble-nvim
      vim-fugitive
      vim-lastplace
      vim-visual-multi
    ];
    extraConfig = ''
      set mouse=a
      set number
      syntax on
      set hlsearch
      set ignorecase
      set smartcase
      set autoindent
      set ruler
      set shiftwidth=2
      set expandtab
      set softtabstop=2
      set cursorline
      let g:rainbow_active = 1

      
      colorscheme gruvbox
    '';
  };
}