One Nix config for your Discord mods, themes, and clients.
Manage Vencord, Equicord, Vesktop, Dorion, and Legcord from your Nix config.
Quickstart | Configuration | Settings Converter | Options | User Plugins
Important
Nixcord is declarative, so changes made in the client's in-app "Plugins" menu are not persistent. Update your .nix file to make settings stick.
Add to flake.nix:
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-26.05";
nixcord.url = "github:4evy/nixcord";
# ...
};
# ...
}Then import the module
Home Manager (Recommended)
Most people should use this. It handles paths and permissions for you
# home.nix
{ inputs, ... }: {
imports = [ inputs.nixcord.homeModules.nixcord ];
# ... config
}NixOS (System-wide)
If you don't use Home Manager
# configuration.nix
{ inputs, ... }: {
imports = [ inputs.nixcord.nixosModules.nixcord ];
programs.nixcord = {
enable = true;
user = "your-username"; # Needed for system-level config
# ... config
};
}nix-darwin (macOS)
If you are managing your Mac system-wide
# darwin-configuration.nix
{ inputs, ... }: {
imports = [ inputs.nixcord.darwinModules.nixcord ];
programs.nixcord = {
enable = true;
user = "your-username"; # Needed for system-level config
# ... config
};
}You can configure Vencord, Equicord, Vesktop, Dorion, or Legcord
Tip: Launch your client once manually to look through the plugins list so you know what you actually want to enable
{
programs.nixcord = {
enable = true;
# Choose your Discord mod client (enable at most one of these two)
discord.vencord.enable = true; # Standard Vencord
# discord.equicord.enable = true; # Equicord (has more plugins)
# Or these
vesktop.enable = true;
# dorion.enable = true;
# legcord.enable = true;
# Theming
quickCss = "/* css goes here */";
config = {
useQuickCss = true;
themeLinks = [
"https://raw.githubusercontent.com/link/to/some/theme.css"
];
frameless = true;
plugins = {
hideMedia.enable = true;
ignoreActivities = {
enable = true;
ignorePlaying = true;
ignoredActivities = [
{ id = "game-id"; name = "League of Legends"; type = 0; }
];
};
};
};
};
}Check the online docs for the full list of options
Already have Vencord or Equicord configured? The docs include a browser-side settings converter that turns an exported settings.json into Nixcord config.
Legcord is a lightweight Discord client. Enable it with:
{
programs.nixcord.legcord = {
enable = true;
# Optionally bundle Vencord or Equicord (also installs userPlugins)
vencord.enable = true;
# equicord.enable = true;
settings = {
channel = "stable";
tray = "dynamic";
minimizeToTray = true;
mods = [ "vencord" ];
doneSetup = true;
};
};
}You can load custom Vencord/Equicord plugins that aren't in the upstream plugin list using userPlugins. Any plugin you add also needs to be enabled in extraConfig.plugins:
{
programs.nixcord = {
# GitHub repo at a specific commit
userPlugins = {
someCoolPlugin = "github:someUser/someCoolPlugin/abc123def456...";
# Local path (requires --impure with flakes)
myLocalPlugin = "/home/user/projects/myPlugin";
# Nix path literal
anotherPlugin = ./plugins/anotherPlugin;
};
extraConfig.plugins = {
someCoolPlugin.enable = true;
myLocalPlugin.enable = true;
anotherPlugin.enable = true;
};
};
}Dorion can read its Nix-managed config.json immediately, but Vencord settings live in Discord's WebKit LocalStorage. That SQLite database is only created after Dorion has successfully loaded Discord once, so Nixcord cannot patch VencordSettings on a completely fresh profile.
- Run Dorion once before enabling Nixcord's Dorion module:
nix run nixpkgs#dorion - Log in, wait for Discord to finish loading, then close it.
- Enable
dorion.enable = truein your config and rebuild.
Warning
Upstream Dorion still marks Linux voice as unsupported because WebKitGTK WebRTC support is incomplete. Voice/video may fail even after Nixcord is configured.
- Web: 4evy.github.io/nixcord
- Build locally:
nix build .#docs - JSON:
nix build .#docs-json
Caution
Vencord & Equicord violates Discord ToS. You probably know this already, but use at your own risk!