From 08b85bd0002c7ac500b8d9ac0112467885712b1f Mon Sep 17 00:00:00 2001 From: awwpotato <153149335+awwpotato@users.noreply.github.com> Date: Mon, 21 Apr 2025 10:25:22 -0700 Subject: [PATCH] vesktop: add support for multiple themes (#6860) --- modules/programs/vesktop.nix | 56 +++++++++++-------- .../programs/vesktop/basic-configuration.nix | 6 +- .../vesktop/basic-vencord-settings.json | 3 - 3 files changed, 35 insertions(+), 30 deletions(-) diff --git a/modules/programs/vesktop.nix b/modules/programs/vesktop.nix index d5169368..afcf1a13 100644 --- a/modules/programs/vesktop.nix +++ b/modules/programs/vesktop.nix @@ -50,12 +50,15 @@ in vencord = { useSystem = lib.mkEnableOption "Vencord package from Nixpkgs"; - theme = lib.mkOption { - description = "The theme to use for Vencord"; - default = null; + themes = lib.mkOption { + description = '' + Themes to add for Vencord, they can be enabled by setting + `programs.vesktop.vencord.settings.enabledThemes` to `[ "THEME_NAME.css" ]` + ''; + default = { }; type = with lib.types; - nullOr (oneOf [ + attrsOf (oneOf [ lines path ]); @@ -89,24 +92,29 @@ in }; }; - config = lib.mkIf cfg.enable ( - lib.mkMerge [ - { - home.packages = [ - (cfg.package.override { withSystemVencord = cfg.vencord.useSystem; }) - ]; - xdg.configFile."vesktop/settings.json".source = jsonFormat.generate "vesktop-settings" cfg.settings; - xdg.configFile."vesktop/settings/settings.json".source = - jsonFormat.generate "vencord-settings" cfg.vencord.settings; - } - (lib.mkIf (cfg.vencord.theme != null) { - programs.vesktop.vencord.settings.enabledThemes = [ "theme.css" ]; - xdg.configFile."vesktop/themes/theme.css".source = - if builtins.isPath cfg.vencord.theme || lib.isStorePath cfg.vencord.theme then - cfg.vencord.theme - else - pkgs.writeText "vesktop/themes/theme.css" cfg.vencord.theme; - }) - ] - ); + config = lib.mkIf cfg.enable { + home.packages = [ + (cfg.package.override { withSystemVencord = cfg.vencord.useSystem; }) + ]; + xdg.configFile = + lib.attrsets.unionOfDisjoint + { + "vesktop/settings.json".source = jsonFormat.generate "vesktop-settings" cfg.settings; + "vesktop/settings/settings.json".source = + jsonFormat.generate "vencord-settings" cfg.vencord.settings; + } + ( + lib.mapAttrs' ( + name: value: + lib.nameValuePair "vesktop/themes/${name}.css" { + source = + if builtins.isPath value || lib.isStorePath value then + value + else + pkgs.writeText "vesktop-themes-${name}" value; + } + ) cfg.vencord.themes + ); + + }; } diff --git a/tests/modules/programs/vesktop/basic-configuration.nix b/tests/modules/programs/vesktop/basic-configuration.nix index 954602e1..5748eab1 100644 --- a/tests/modules/programs/vesktop/basic-configuration.nix +++ b/tests/modules/programs/vesktop/basic-configuration.nix @@ -13,7 +13,7 @@ discordBranch = "stable"; }; vencord = { - theme = '' + themes.my_theme = '' .privateChannels_f0963d::after { content: ""; position: absolute; @@ -51,8 +51,8 @@ assertFileExists $configDir/settings/settings.json assertFileContent $configDir/settings/settings.json \ ${./basic-vencord-settings.json} - assertFileExists $configDir/themes/theme.css - assertFileContent $configDir/themes/theme.css \ + assertFileExists $configDir/themes/my_theme.css + assertFileContent $configDir/themes/my_theme.css \ ${./basic-theme.css} ''; }; diff --git a/tests/modules/programs/vesktop/basic-vencord-settings.json b/tests/modules/programs/vesktop/basic-vencord-settings.json index 141da18c..afc50e95 100644 --- a/tests/modules/programs/vesktop/basic-vencord-settings.json +++ b/tests/modules/programs/vesktop/basic-vencord-settings.json @@ -2,9 +2,6 @@ "autoUpdate": false, "autoUpdateNotification": false, "disableMinSize": true, - "enabledThemes": [ - "theme.css" - ], "notifyAboutUpdates": false, "plugins": { "FakeNitro": {