{
  config,
  pkgs,
  lib,
  ...
}: let
  inherit (config.vars) neovimIde;
  inherit (pkgs) vimPlugins;

  flakeEnv = config.programs.bash.sessionVariables.FLAKE;
in
  lib.mkIf neovimIde {
    programs = {
      neovim = {
        extraPackages = [
          pkgs.lua-language-server
        ];

        plugins = [
          {
            plugin = vimPlugins.neodev-nvim;
            type = "lua";
            config =
              # lua
              ''
                vim.api.nvim_create_autocmd('FileType', {
                    pattern = 'lua',
                    command = 'setlocal ts=4 sw=4 sts=0 expandtab',
                });

                -- IMPORTANT: make sure to setup neodev BEFORE lspconfig
                require("neodev").setup({
                    override = function(root_dir, library)
                        if root_dir:find('${flakeEnv}', 1, true) == 1 then
                            library.enabled = true
                            library.plugins = true
                        end
                    end,
                });

                require('lspconfig').lua_ls.setup(
                    require('coq').lsp_ensure_capabilities({}));
              '';
          }
        ];
      };
    };
  }