{
  config,
  pkgs,
  lib,
  ...
}: let
  inherit (config.vars) neovimIde;
  inherit (lib) fileContents;
  inherit (pkgs) vimPlugins;
in
  lib.mkIf neovimIde {
    programs = {
      neovim = {
        coc = {
          enable = true;
          settings = {
            colors.enable = true;
            coc.preferences.formatOnType = true;
            diagnostic.checkCurrentLine = true;
            inlayHint.enable = false;
          };
        };

        extraLuaConfig =
          /*
          lua
          */
          ''
            vim.api.nvim_create_autocmd("FileType", {
               pattern = 'hyprlang',
               command = 'setlocal ts=4 sw=4 sts=0 expandtab',
            });

            vim.api.nvim_create_user_command("Format", "call CocAction('format')", {});

            -- Always show the signcolumn, otherwise it would shift the text each time
            -- diagnostics appear/become resolved
            vim.opt.signcolumn = 'yes';
          '';

        plugins = [
          {
            plugin = vimPlugins.coc-snippets;
            type = "viml";
            config = fileContents ./plugins/snippets.vim;
          }

          ## Fzf
          vimPlugins.coc-fzf

          vimPlugins.coc-highlight
          vimPlugins.coc-json
          vimPlugins.coc-yaml
          vimPlugins.coc-toml
        ];
      };
    };
  }