diff --git a/modules/modules.nix b/modules/modules.nix index 0b746a0c6..aa2c104ca 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -278,7 +278,9 @@ let ./programs/translate-shell.nix ./programs/urxvt.nix ./programs/vdirsyncer.nix + ./programs/vesktop.nix ./programs/vifm.nix + ./programs/vim.nix ./programs/vim-vint.nix ./programs/vim.nix ./programs/vinegar.nix diff --git a/modules/programs/vesktop.nix b/modules/programs/vesktop.nix new file mode 100644 index 000000000..d51693687 --- /dev/null +++ b/modules/programs/vesktop.nix @@ -0,0 +1,112 @@ +{ + config, + lib, + pkgs, + ... +}: + +let + + cfg = config.programs.vesktop; + jsonFormat = pkgs.formats.json { }; + +in +{ + meta.maintainers = [ + lib.maintainers.Flameopathic + lib.hm.maintainers.LilleAila + ]; + + options.programs.vesktop = { + enable = lib.mkEnableOption "Vesktop, an alternate client for Discord with Vencord built-in"; + package = lib.mkPackageOption pkgs "vesktop" { }; + settings = lib.mkOption { + type = jsonFormat.type; + default = { }; + description = '' + Vesktop settings written to + {file}`$XDG_CONFIG_HOME/vesktop/settings.json`. See + + for available options. + ''; + example = lib.literalExpression '' + { + appBadge = false; + arRPC = true; + checkUpdates = false; + customTitleBar = false; + disableMinSize = true; + minimizeToTray = false; + tray = false; + splashBackground = "#000000"; + splashColor = "#ffffff"; + splashTheming = true; + staticTitle = true; + hardwareAcceleration = true; + discordBranch = "stable"; + } + ''; + }; + + vencord = { + useSystem = lib.mkEnableOption "Vencord package from Nixpkgs"; + theme = lib.mkOption { + description = "The theme to use for Vencord"; + default = null; + type = + with lib.types; + nullOr (oneOf [ + lines + path + ]); + }; + settings = lib.mkOption { + type = jsonFormat.type; + default = { }; + description = '' + Vencord settings written to + {file}`$XDG_CONFIG_HOME/vesktop/settings/settings.json`. See + + for available options. + ''; + example = lib.literalExpression '' + { + autoUpdate = false; + autoUpdateNotification = false; + notifyAboutUpdates = false; + useQuickCss = true; + disableMinSize = true; + plugins = { + MessageLogger = { + enabled = true; + ignoreSelf = true; + }; + FakeNitro.enabled = true; + }; + } + ''; + }; + }; + }; + + 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; + }) + ] + ); +} diff --git a/tests/default.nix b/tests/default.nix index 3d6dc43a8..2e16f93aa 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -548,6 +548,7 @@ import nmtSrc { ./modules/programs/swayr ./modules/programs/terminator ./modules/programs/tofi + ./modules/programs/vesktop ./modules/programs/vinegar ./modules/programs/waybar ./modules/programs/wlogout diff --git a/tests/modules/programs/vesktop/basic-configuration.nix b/tests/modules/programs/vesktop/basic-configuration.nix new file mode 100644 index 000000000..954602e17 --- /dev/null +++ b/tests/modules/programs/vesktop/basic-configuration.nix @@ -0,0 +1,59 @@ +{ config, pkgs, ... }: + +{ + config = { + programs.vesktop = { + enable = true; + settings = { + tray = false; + minimizeToTray = false; + hardwareAcceleration = true; + customTitleBar = false; + staticTitle = true; + discordBranch = "stable"; + }; + vencord = { + theme = '' + .privateChannels_f0963d::after { + content: ""; + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: 1000; + background: linear-gradient(to bottom, transparent 85%, var(--base00)); + pointer-events: none; + } + ''; + settings = { + autoUpdate = false; + autoUpdateNotification = false; + notifyAboutUpdates = false; + useQuickCss = true; + disableMinSize = true; + plugins = { + MessageLogger = { + enabled = true; + ignoreSelf = true; + }; + FakeNitro.enabled = true; + }; + }; + }; + }; + + nmt.script = '' + configDir=home-files/.config/vesktop + assertFileExists $configDir/settings.json + assertFileContent $configDir/settings.json \ + ${./basic-settings.json} + assertFileExists $configDir/settings/settings.json + assertFileContent $configDir/settings/settings.json \ + ${./basic-vencord-settings.json} + assertFileExists $configDir/themes/theme.css + assertFileContent $configDir/themes/theme.css \ + ${./basic-theme.css} + ''; + }; +} diff --git a/tests/modules/programs/vesktop/basic-settings.json b/tests/modules/programs/vesktop/basic-settings.json new file mode 100644 index 000000000..21770351e --- /dev/null +++ b/tests/modules/programs/vesktop/basic-settings.json @@ -0,0 +1,8 @@ +{ + "customTitleBar": false, + "discordBranch": "stable", + "hardwareAcceleration": true, + "minimizeToTray": false, + "staticTitle": true, + "tray": false +} diff --git a/tests/modules/programs/vesktop/basic-theme.css b/tests/modules/programs/vesktop/basic-theme.css new file mode 100644 index 000000000..23e9e4c23 --- /dev/null +++ b/tests/modules/programs/vesktop/basic-theme.css @@ -0,0 +1,11 @@ +.privateChannels_f0963d::after { + content: ""; + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: 1000; + background: linear-gradient(to bottom, transparent 85%, var(--base00)); + pointer-events: none; +} diff --git a/tests/modules/programs/vesktop/basic-vencord-settings.json b/tests/modules/programs/vesktop/basic-vencord-settings.json new file mode 100644 index 000000000..141da18c2 --- /dev/null +++ b/tests/modules/programs/vesktop/basic-vencord-settings.json @@ -0,0 +1,19 @@ +{ + "autoUpdate": false, + "autoUpdateNotification": false, + "disableMinSize": true, + "enabledThemes": [ + "theme.css" + ], + "notifyAboutUpdates": false, + "plugins": { + "FakeNitro": { + "enabled": true + }, + "MessageLogger": { + "enabled": true, + "ignoreSelf": true + } + }, + "useQuickCss": true +} diff --git a/tests/modules/programs/vesktop/default.nix b/tests/modules/programs/vesktop/default.nix new file mode 100644 index 000000000..5e3129407 --- /dev/null +++ b/tests/modules/programs/vesktop/default.nix @@ -0,0 +1 @@ +{ vesktop-basic-configuration = ./basic-configuration.nix; }