{
  imports = [ ../../accounts/email-test-accounts.nix ];

  programs.mbsync = {
    enable = true;
    # programs.mbsync.groups and
    # accounts.email.accounts.<name>.mbsync.groups should NOT be used at the
    # same time.
    # If they are, then the new version will take precedence.
    groups.inboxes = {
      "hm@example.com" = [
        "Inbox1"
        "Inbox2"
      ];
      hm-account = [ "Inbox" ];
    };
  };

  accounts.email.accounts = {
    "hm@example.com".mbsync = {
      enable = true;
      extraConfig.account.TLSVersions = [
        "+1.3"
        "+1.2"
        "-1.1"
      ];
      groups.inboxes = {
        channels = {
          inbox1 = {
            farPattern = "Inbox1";
            nearPattern = "Inboxes";
          };
          inbox2 = {
            farPattern = "Inbox2";
            nearPattern = "Inboxes";
          };
        };
      };
    };

    hm-account.mbsync = {
      enable = true;
      groups.hm-account = {
        channels.earlierPatternMatch = {
          farPattern = "Label";
          nearPattern = "SomethingUnderLabel";
          patterns = [
            "ThingUnderLabel"
            "!NotThisMaildirThough"
            ''"[Weird] Label?"''
          ];
        };
        channels.inbox = {
          farPattern = "Inbox";
          nearPattern = "Inbox";
        };
        channels.strangeHostBoxName = {
          farPattern = "[Weird]/Label Mess";
          nearPattern = "[AnotherWeird]/Label";
        };
        channels.patternMatch = {
          farPattern = "Label";
          nearPattern = "SomethingUnderLabel";
          patterns = [
            "ThingUnderLabel"
            "!NotThisMaildirThough"
            ''"[Weird] Label?"''
          ];
        };
      };
      # No group should be printed.
      groups.emptyGroup = { };
      # Group should be printed, but left with default channels.
      groups.emptyChannels = {
        channels.empty1 = { };
        channels.empty2 = { };
      };
    };
  };

  nmt.script = ''
    assertFileExists home-files/.config/isyncrc
    assertFileContent home-files/.config/isyncrc ${./mbsync-expected.conf}
  '';
}
