Declarative Vencord configuration on NixOS
2024-11-01
Last edit: 2024-11-01
---------------------
After installing
HTML Vesktop
in the classic way on NixOS, i.e. by installing the `vesktop` package in the official Nix expressions collection. I wondered if there wasn't a cleaner way of configuring the application. Because configuring an application on every new system is a pain.
So I found
HTML Nixcord](https://github.com/KaylorBen/nixcord). It is a [home-manager](https://nix-community.github.io/home-manager) module that allows you to declare [Vencord
parameters and plugins in Nix.
It's pretty simple to use and works perfectly. Just add it to the home-manager's imported modules and activate it.
I've written my own Nix module that wraps nixcord, so here's what it looks like.
```nix
{
config,
lib,
namespace,
...
}:
let
inherit (lib) mkIf types strings;
inherit (lib.${namespace})
mkBoolOpt
mkOpt
enabled
disabled
;
cfg = config.${namespace}.messages.discord;
trimWith' =
s:
strings.trimWith {
start = true;
end = true;
} s;
in
{
options.${namespace}.messages.discord = with types; {
enable = mkBoolOpt false "Whether or not to manage discord.";
quickCss = mkOpt str (builtins.readFile ./custom.css) "Vencord quick CSS.";
config = mkOpt attrs {
useQuickCss = ((trimWith' cfg.quickCss) != "");
plugins = {
betterFolders = enabled;
betterRoleContext = enabled;
crashHandler = enabled;
memberCount = enabled;
mentionAvatars = enabled;
messageLatency = enabled;
showHiddenThings = enabled;
showMeYourName = enabled;
webContextMenus = enabled;
webKeybinds = enabled;
webScreenShareFixes = enabled;
alwaysAnimate = enabled;
};
} "Manage the nixcord configuration.";
};
config = mkIf cfg.enable {
stylix.targets.vesktop.enable = false;
programs.nixcord = {
enable = true;
discord = disabled;
vesktop.enable = true;
inherit (cfg) config quickCss;
};
};
}
```
With regard to the above code snippet, please note that in my case, the home-manager modules are managed by the
HTML Snowfall lib
.
```nix
enabled = { enable = true; };
disabled = { enable = false; };
```
I've explicitly deactivated de Discord which is enabled by default, as well as the Vesktop theming by
HTML Stylix](https://stylix.danth.me) because the [Dracula
theme (far too cyan-based).
Instead I downloaded
HTML draculatheme.com/betterdiscord
so as not to depend on the Internet and activated it with the `quickCss` option.
HTML Nixcord
is really great, you really should use it !