{
  pkgs,
  lib,
  config,
  osConfig ? {},
  inputs,
  ...
}: let
  cfg = config.nixfiles.packageSets.communication;
  rustdesk-pkg =
    if (lib.strings.hasInfix "23.11" lib.version)
    then inputs.nixpkgs-unstable.legacyPackages.${pkgs.system}.rustdesk-flutter
    else pkgs.rustdesk-flutter;

  vesktop-ozone-cmd = let
    extraFlags = lib.optionalString config.nixfiles.workarounds.nvidiaPrimary " --disable-gpu";
  in "env NIXOS_OZONE_WL=1 vesktop${extraFlags}";

  waitNet = pkgs.writeShellScript "wait-network" ''
    until ${pkgs.curl}/bin/curl -fs https://www.google.com &>/dev/null; do
      sleep 5
      ((counter++)) && ((counter>=60)) && break
    done
    exec "$@"
  '';
in {
  options.nixfiles.packageSets.communication = {
    enable = lib.mkEnableOption "communication package set";
  };
  config = lib.mkIf cfg.enable {
    xdg.desktopEntries.vesktop = lib.mkIf config.nixfiles.meta.graphical {
      categories = ["Network" "InstantMessaging" "Chat"];
      exec = vesktop-ozone-cmd + " %U";
      genericName = "Internet Messenger";
      icon = "vesktop";
      name = "Vesktop";
      type = "Application";
      settings = {
        StartupWMClass = "Vesktop";
        Keywords = "discord;vencord;electron;chat";
      };
    };

    nixfiles.common.wm.autostart = lib.optionals config.nixfiles.meta.graphical [
      (waitNet + " " + vesktop-ozone-cmd + " --start-minimized")
    ];

    home.packages = with pkgs;
      lib.optionals config.nixfiles.meta.graphical [
        element-desktop
        telegram-desktop
        signal-desktop
        thunderbird
        vesktop
        rustdesk-pkg
        tor-browser
        onionshare
      ]
      ++ [
        irssi
      ];
  };
}