{ ... }:

{
  programs.khal = {
    enable = true;
    settings = {
      default.timedelta = "5d";
      view.agenda_event_format =
        "{calendar-color}{cancelled}{start-end-time-style} {title}{repeat-symbol}{reset}";
    };

  };
  accounts.calendar = {
    basePath = "$XDG_CONFIG_HOME/cal";
    accounts = {
      test = {
        primary = true;
        primaryCollection = "test";
        khal = {
          enable = true;
          readOnly = true;
          color = "#ff0000";
          type = "calendar";
        };
        local.type = "filesystem";
        local.fileExt = ".ics";
        name = "test";
        remote = {
          type = "http";
          url = "https://example.com/events.ical";
        };
      };
      testWithAddresss = {
        khal = {
          enable = true;
          addresses = [ "john.doe@email.com" ];
        };
        local = {
          type = "filesystem";
          fileExt = ".ics";
        };
        remote = {
          type = "http";
          url = "https://example.com/events.ical";
        };
      };
      testWithMultipleAddresss = {
        khal = {
          enable = true;
          addresses = [ "john.doe@email.com" "another.brick@on.the.wall" ];
        };
        local = {
          type = "filesystem";
          fileExt = ".ics";
        };
        remote = {
          type = "http";
          url = "https://example.com/events.ical";
        };
      };
    };
  };

  accounts.contact = {
    basePath = "$XDG_CONFIG_HOME/card";
    accounts = {
      testcontacts = {
        khal = {
          enable = true;
          collections = [ "default" "automaticallyCollected" ];
        };
        local.type = "filesystem";
        local.fileExt = ".vcf";
        name = "testcontacts";
        remote = {
          type = "http";
          url = "https://example.com/contacts.vcf";
        };
      };

      testcontactsNoCollections = {
        khal.enable = true;
        local.type = "filesystem";
        local.fileExt = ".vcf";
        name = "testcontactsNoCollections";
        remote = {
          type = "http";
          url = "https://example.com/contacts.vcf";
        };
      };
    };
  };

  test.stubs = { khal = { }; };

  nmt.script = ''
    configFile=home-files/.config/khal/config
    assertFileExists $configFile
    assertFileContent $configFile ${./khal-config-expected}
  '';
}