{ pkgs, ... }:

let
  configDir = if pkgs.stdenv.isDarwin then
    "home-files/Library/Application Support"
  else
    "home-files/.config";
in {
  programs.nheko = {
    enable = true;

    settings = {
      general = { disableCertificateValidation = false; };

      auth = {
        accessToken = "MY_ACCESS_TOKEN";
        deviceId = "MY_DEVICE";
        homeServer = "https://matrix-client.matrix.org:443";
        userId = "@@user:matrix.org";
      };

      sidebar = { width = 416; };

      settings = { scaleFactor = 0.7; };

      user = {
        alertOnNotification = true;
        animateImagesOnHover = false;
        automaticallyShareKeysWithTrustedUsers = false;
        avatarCircles = true;
        bubblesEnabled = false;
        decryptSidebar = true;
        desktopNotifications = true;
        emojiFontFamily = "Noto Emoji";
        exposeDbusApi = false;
        fontFamily = "JetBrainsMonoMedium Nerd Font Mono";
        fontSize = 9;
        groupView = true;
        markdownEnabled = true;
        minorEvents = false;
        mobileMode = false;
        mutedTags = "global";
        onlineKeyBackup = false;
        onlyShareKeysWithVerifiedUsers = false;
        openImageExternal = false;
        openVideoExternal = false;
        presence = "AutomaticPresence";
        privacyScreen = false;
        privacyScreenTimeout = 0;
        readReceipts = true;
        ringtone = "Mute";
        shareKeysWithTrustedUsers = true;
        smallAvatarsEnabled = false;
        "sidebar\\communityListWidth" = 40;
        "sidebar\\roomListWidth" = 308;
        sortByUnread = true;
        spaceNotifications = true;
        theme = "dark";
        "timeline\\buttons" = true;
        "timeline\\enlargeEmojiOnlyMsg" = true;
        "timeline\\maxWidth" = 0;
        "timeline\\messageHoverHighlight" = false;
        typingNotifications = true;
        useIdenticon = true;
        useStunServer = false;
        "window\\startInTray" = false;
        "window\\tray" = true;
      };

      window = {
        height = 482;
        width = 950;
      };
    };
  };

  test.stubs.nheko = { };

  nmt.script = ''
    assertFileContent \
      "${configDir}/nheko/nheko.conf" \
      ${./nheko-example-settings-expected-config.ini}
  '';
}