Discord: Difference between revisions

From NixOS Wiki
imported>Hypnosis2839
→‎OpenAsar / Vencord: add warning to copy the example verbatim
Frontear (talk | contribs)
improve the troubleshooting format
 
(10 intermediate revisions by 7 users not shown)
Line 1: Line 1:
{{unfree}}
Discord is an instant messaging and VoIP application with lots of functionality. It provides a web interface, though most users would prefer to use a client for interoperability with their system.


== Installation ==
== Installation ==
Add one of
{{Unfree}}


<pre>
=== Official Clients ===
pkgs.discord
Nixpkgs provides all three of Discord's release channels, accessible as <code>pkgs.discord</code>, <code>pkgs.discord-ptb</code>, and <code>pkgs.discord-canary</code> respectively. Add any of the previous derivations to your package's configuration. For [[NixOS]] this will be in <code>environment.systemPackages</code> or <code>users.users.<name>.packages</code>.<syntaxhighlight lang="nixos">
pkgs.discord-ptb
# configuration.nix
pkgs.discord-canary
{ config, lib, pkgs, ... }: {
</pre>
  # This will install Discord PTB for all users of the system
  environment.systemPackages = with pkgs; [
    discord-ptb
  ];


to your <code>environment.systemPackages</code> (NixOS) or <code>home.packages</code> (Home Manager).
  # This installs Discord PTB only for the user "alice"
  users.users.alice.packages = with pkgs; [
    discord-ptb
  ];
}
</syntaxhighlight>


Additionally, see [[Unfree Software]] to allow Discord to be installed.
=== Unofficial Clients ===
Nixpkgs also provides a vast variety of community developed/modded Discord clients, which can usually serve as drop-in replacements for the official discord client with an extended set of features.
{{Warning|The usage of such client's goes against Discord's [https://discord.com/terms TOS], and can result in your account being permanently suspended from the platform!}}


== Alternative packages ==
==== Legcord (formerly ArmCord)<ref>https://github.com/Legcord/Legcord</ref> ====
 
Lightweight, alternative desktop client with built-in modding extensibility. Nixpkgs provides this client via <code>pkgs.legcord</code>.<syntaxhighlight lang="nixos">
=== BetterDiscord ===
{ config, lib, pkgs, ... }: {
[https://betterdiscord.app BetterDiscord] is a client modification engine which allows you to use custom plugins, themes, and more. The easiest way to install this is using [https://github.com/bb010g/betterdiscordctl betterdiscordctl].
  environment.systemPackages = with pkgs; [
<syntaxhighlight lang="console">
    legcord
$ nix run nixpkgs#betterdiscordctl install
  ];
}
</syntaxhighlight>
</syntaxhighlight>


=== OpenAsar / Vencord ===
==== BetterDiscord<ref>https://betterdiscord.app/</ref> ====
Enhances Discord desktop app with new features. Nixpkgs provides the installer via <code>pkgs.betterdiscordctl</code>. This can be added to your configuration, though users may prefer to instead run it one-off via the [[Nix]] cli.<syntaxhighlight lang="bash">
$ nix-shell -p betterdiscordctl --command 'betterdiscordctl install' # nix-legacy
$ nix run nixpkgs#betterdiscordctl -- install # nix3


You can use Discord [https://github.com/GooseMod/OpenAsar OpenAsar] and/or [https://github.com/Vendicated/Vencord Vencord] by replacing <code>pkgs.discord</code> (or any other discord package) in your list of packages with the following override:
$ nix-shell -p betterdiscordctl --command 'betterdiscordctl self-upgrade' # nix-legacy
<syntaxhighlight lang="nix">
$ nix run nixpkgs#betterdiscordctl -- self-upgrade # nix3
(pkgs.discord.override {
  # remove any overrides that you don't want
  withOpenASAR = true;
  withVencord = true;
})
</syntaxhighlight>
</syntaxhighlight>


{{ warning | Do not remove the parentheses, or it will not work. }}
==== OpenAsar<ref>https://github.com/GooseMod/OpenAsar</ref> ====
 
Open-source alternative to Discord's <code>app.asar</code>. Nixpkgs provides this via <code>pkgs.openasar</code>, though this doesn't provide a usable client. Users should instead prefer overriding the official discord package and add <code>withOpenASAR = true</code>.<syntaxhighlight lang="nixos">
== Join the NixOS Discord ==
{ config, lib, pkgs, ... }: {
 
  environment.systemPackages = with pkgs; [
Follow this link to join the unofficial NixOS Discord: https://discord.com/invite/RbvHtGa
    (discord.override {
 
      withOpenASAR = true;
== Troubleshooting ==
      # withVencord = true; # can do this here too
 
    })
=== Discord crashes when a notification is received ===
  ];
Discord crashes if there is no notification-daemon
}
 
standalone notification daemons
{{app|dunst|Lightweight and customizable notification daemon for x11|https://github.com/dunst-project/dunst|dunst}}
{{app|mako|A lightweight Wayland notification daemon|https://github.com/emersion/mako/|mako}}
 
=== Discord wants latest version ===
 
[[File:discord_update_latest.png]]
 
Discord refuses to start because they have released an update and it wants to download that instead.
 
To prevent Discord from checking for new versions, add the following to <code>~/.config/discord/settings.json</code>:
<syntaxhighlight lang="json">
{
    "SKIP_HOST_UPDATE": true
}</syntaxhighlight>
If the file already exists the braces aren't necessary.
 
 
Alternatively, you can install the updated version.
 
If the version has already been updated in a newer version of nixpkgs, installing it works something like this:
 
<syntaxhighlight lang="nix">
nixpkgs.overlays = [(self: super: { discord = super.discord.overrideAttrs (_: { src = builtins.fetchTarball <link-to-tarball>; });})];
</syntaxhighlight>
</syntaxhighlight>


An overlay to build discord manually from the URL to the latest tarball on [https://discord.com/api/download?platform=linux&format=tar.gz], see [https://github.com/NixOS/nixpkgs/issues/94806]
==== Vencord<ref>https://vencord.dev/</ref> ====
The cutest Discord client mod. Nixpkgs provides their custom client [https://github.com/Vencord/Vesktop Vesktop] via<code>pkgs.vesktop</code>, or as an override for the official discord package via <code>withVencord = true</code>.<syntaxhighlight lang="nixos">
{ config, lib, pkgs, ... }: {
  environment.systemPackages = with pkgs; [
    # vesktop # If you prefer this


If it was fixed in master, the other alternatives are:
    (discord.override {
 
      # withOpenASAR = true; # can do this here too
<syntaxhighlight lang="console">
      withVencord = true;
nix-env -f https://github.com/NixOS/nixpkgs/archive/release-20.09.tar.gz -iA discord
    })
  ];
}
</syntaxhighlight>
</syntaxhighlight>


or with nix-shell:
==== Webcord<ref>https://github.com/SpacingBat3/WebCord</ref> ====
 
Discord and [https://spacebar.chat/ Spacebar] client implemented without using the official Discord API. Nixpkgs provides this client via <code>pkgs.webcord</code>.<syntaxhighlight lang="nixos">
<syntaxhighlight lang="console">
{ config, lib, pkgs, ... }: {
NIX_PATH=nixpkgs=https://github.com/NixOS/nixpkgs/archive/release-20.09.tar.gz nix-shell -p discord --run Discord
  environment.systemPackages = with pkgs; [
    webcord
  ];
}
</syntaxhighlight>
</syntaxhighlight>


=== Opening Links with Firefox ===
== Troubleshooting ==
If you use Discord and it silently fails to open links in Firefox, you possibly have encountered [https://github.com/NixOS/nixpkgs/issues/78961 issue #78961]. This is caused by a version mismatch between the NSS libraries used by Discord and Firefox. Luckily, a relatively easy workaround is available:


First, find out which NSS version Firefox is currently using with
=== Screensharing on Wayland ===
<syntaxhighlight lang="console">
Discord's screen sharing capabilities have been broken for [https://support.discord.com/hc/en-us/community/posts/360047644231-Native-Wayland-Support?page=2#comments 5 years with no official fix]. The most consistent fix involves using the web version of Discord alongside a browser that supports screen sharing in Wayland, like [[Firefox]]. Alternatively, you can use an [[Discord#Unofficial Clients|unofficial client]] like ''Webcord'' or ''Vesktop'', both of which have fixed this issue in their own ways.
$ nix path-info $(which firefox) -r | grep nss-
{{Note|Remember to configure an [https://wiki.archlinux.org/title/XDG_Desktop_Portal#List_of_backends_and_interfaces XDG Desktop Portal] with screen cast capabilities!}}
</syntaxhighlight>


This should print a few store paths, focus on their ends, which should look like <code>nss-x.xx</code>. We're interested in the one with the newest version. Next, create a new file called <code>discord_patched.nix</code> and paste the following code into it:
=== Notifications causing crashes ===
<syntaxhighlight lang="nix">
Discord will crash if there is no compatible notification daemon running. This issue is only prevalent in custom desktop environments, such as [[Sway]] or [[Hyprland]]. Comprehensive documentation usually exists for most window managers/compositors and can be found on their respective wikis. Nixpkgs provides a few standalone notification daemons such as <code>pkgs.dunst</code> and <code>pkgs.mako</code>. You may optionally use a notification daemon from a larger DE, such as <code>pkgs.lxqt.lxqt-notificationd</code>, however it is unclear how effective these will be outside of their normal environment.<syntaxhighlight lang="nixos">
with import <nixpkgs> {};
{ config, lib, pkgs, ... }: {
 
  # You will need to add a call for the daemon to actually function.
pkgs.discord.override {
  # This is usually done within the configuration of your respective WM.
    nss = pkgs.nss_3_49_2;
  # See the official wiki/documentation for your WM for more info.
  environment.systemPackages = with pkgs; [
    mako
  ];
}
}
</syntaxhighlight>
</syntaxhighlight>


Now replace <code>nss_3_49_2</code> with the previously looked up version's "attribute name", which you can look up [https://search.nixos.org/packages/?query=nss_ here]. Finally, build and install this patched package with
=== "Must be your lucky day" popup ===
<syntaxhighlight lang="console">
Although Nixpkgs is usually very fast with updates (if you use ''nixos-unstable''), you may still run into this issue intermittently. You may override the discord package with a more up-to-date source, or you may disable this popup entirely by adding <code>"SKIP_HOST_UPDATE": true</code> to <code>~/.config/discord/settings.json</code>.
$ export NIXPKGS_ALLOW_UNFREE=1; nix-env -i $(nix-build discord_patched.nix) --arg config '{ allowUnfree = true; }'
{{File|~/.config/discord/settings.json|json|
</syntaxhighlight>
{
 
  "SKIP_HOST_UPDATE": true
Log in again and you should be able to open links properly.
<nowiki>}</nowiki>
}}


=== Krisp noise suppression ===
=== Krisp noise suppression ===
Line 116: Line 111:
(pkgs.discord.override { withTTS = true; })
(pkgs.discord.override { withTTS = true; })
</syntaxhighlight>
</syntaxhighlight>
== Links ==
[https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/networking/instant-messengers/discord/default.nix default.nix for discord]
[[Category:Applications]]
[[Category:Applications]]
[[Category:Gaming]]

Latest revision as of 00:33, 18 October 2024

Discord is an instant messaging and VoIP application with lots of functionality. It provides a web interface, though most users would prefer to use a client for interoperability with their system.

Installation

Note: This package is unfree and requires extra steps to install.

Official Clients

Nixpkgs provides all three of Discord's release channels, accessible as pkgs.discord, pkgs.discord-ptb, and pkgs.discord-canary respectively. Add any of the previous derivations to your package's configuration. For NixOS this will be in environment.systemPackages or users.users.<name>.packages.

# configuration.nix
{ config, lib, pkgs, ... }: {
  # This will install Discord PTB for all users of the system
  environment.systemPackages = with pkgs; [
    discord-ptb
  ];

  # This installs Discord PTB only for the user "alice"
  users.users.alice.packages = with pkgs; [
    discord-ptb
  ];
}

Unofficial Clients

Nixpkgs also provides a vast variety of community developed/modded Discord clients, which can usually serve as drop-in replacements for the official discord client with an extended set of features.

Warning: The usage of such client's goes against Discord's TOS, and can result in your account being permanently suspended from the platform!

Legcord (formerly ArmCord)[1]

Lightweight, alternative desktop client with built-in modding extensibility. Nixpkgs provides this client via pkgs.legcord.

{ config, lib, pkgs, ... }: {
  environment.systemPackages = with pkgs; [
    legcord
  ];
}

BetterDiscord[2]

Enhances Discord desktop app with new features. Nixpkgs provides the installer via pkgs.betterdiscordctl. This can be added to your configuration, though users may prefer to instead run it one-off via the Nix cli.

$ nix-shell -p betterdiscordctl --command 'betterdiscordctl install' # nix-legacy
$ nix run nixpkgs#betterdiscordctl -- install # nix3

$ nix-shell -p betterdiscordctl --command 'betterdiscordctl self-upgrade' # nix-legacy
$ nix run nixpkgs#betterdiscordctl -- self-upgrade # nix3

OpenAsar[3]

Open-source alternative to Discord's app.asar. Nixpkgs provides this via pkgs.openasar, though this doesn't provide a usable client. Users should instead prefer overriding the official discord package and add withOpenASAR = true.

{ config, lib, pkgs, ... }: {
  environment.systemPackages = with pkgs; [
    (discord.override {
      withOpenASAR = true;
      # withVencord = true; # can do this here too
    })
  ];
}

Vencord[4]

The cutest Discord client mod. Nixpkgs provides their custom client Vesktop viapkgs.vesktop, or as an override for the official discord package via withVencord = true.

{ config, lib, pkgs, ... }: {
  environment.systemPackages = with pkgs; [
    # vesktop # If you prefer this

    (discord.override {
      # withOpenASAR = true; # can do this here too
      withVencord = true;
    })
  ];
}

Webcord[5]

Discord and Spacebar client implemented without using the official Discord API. Nixpkgs provides this client via pkgs.webcord.

{ config, lib, pkgs, ... }: {
  environment.systemPackages = with pkgs; [
    webcord
  ];
}

Troubleshooting

Screensharing on Wayland

Discord's screen sharing capabilities have been broken for 5 years with no official fix. The most consistent fix involves using the web version of Discord alongside a browser that supports screen sharing in Wayland, like Firefox. Alternatively, you can use an unofficial client like Webcord or Vesktop, both of which have fixed this issue in their own ways.

Note: Remember to configure an XDG Desktop Portal with screen cast capabilities!

Notifications causing crashes

Discord will crash if there is no compatible notification daemon running. This issue is only prevalent in custom desktop environments, such as Sway or Hyprland. Comprehensive documentation usually exists for most window managers/compositors and can be found on their respective wikis. Nixpkgs provides a few standalone notification daemons such as pkgs.dunst and pkgs.mako. You may optionally use a notification daemon from a larger DE, such as pkgs.lxqt.lxqt-notificationd, however it is unclear how effective these will be outside of their normal environment.

{ config, lib, pkgs, ... }: {
  # You will need to add a call for the daemon to actually function.
  # This is usually done within the configuration of your respective WM.
  # See the official wiki/documentation for your WM for more info.
  environment.systemPackages = with pkgs; [
    mako
  ];
}

"Must be your lucky day" popup

Although Nixpkgs is usually very fast with updates (if you use nixos-unstable), you may still run into this issue intermittently. You may override the discord package with a more up-to-date source, or you may disable this popup entirely by adding "SKIP_HOST_UPDATE": true to ~/.config/discord/settings.json.

~/.config/discord/settings.json
{
  "SKIP_HOST_UPDATE": true
}

Krisp noise suppression

The Krisp noise suppression option will not work on NixOS because the Discord binary is patched before installation, and there is a DRM-style integrity check in the Krisp binary which prevents Krisp from working if the Discord binary is modified. See https://github.com/NixOS/nixpkgs/issues/195512 for details.

Text-to-Speech

TTS is disabled by default; you may enable it via an override:

(pkgs.discord.override { withTTS = true; })