home-manager/modules/programs/freetube.nix

61 lines
1.6 KiB
Nix
Raw Normal View History

2024-04-21 11:12:43 +00:00
{ lib, pkgs, config, ... }:
let
inherit (lib)
concatStringsSep mapAttrsToList mkIf mkEnableOption mkPackageOption mkOption
literalExpression;
cfg = config.programs.freetube;
settings = settings:
let
convertSetting = name: value:
builtins.toJSON {
"_id" = name;
"value" = value;
};
in concatStringsSep "\n" (mapAttrsToList convertSetting settings) + "\n";
in {
meta.maintainers = with lib.maintainers; [ vonixxx ];
options.programs.freetube = {
enable = mkEnableOption "FreeTube, a YT client for Windows, Mac, and Linux";
package = mkPackageOption pkgs "freetube" { };
settings = mkOption {
type = lib.types.attrs;
default = { };
example = literalExpression ''
{
allowDashAv1Formats = true;
checkForUpdates = false;
defaultQuality = "1080";
baseTheme = "catppuccinMocha";
}
'';
description = ''
Configuration settings for FreeTube.
All configurable options can be deduced by enabling them through the
GUI and observing the changes in {file}`settings.db`.
'';
};
};
config = mkIf cfg.enable {
home.packages = [ cfg.package ];
xdg.configFile."FreeTube/hm_settings.db" = {
source = pkgs.writeText "hm_settings.db" (settings cfg.settings);
onChange = let
hmSettingsDb = "${config.xdg.configHome}/FreeTube/hm_settings.db";
settingsDb = "${config.xdg.configHome}/FreeTube/settings.db";
in ''
run install -Dm644 $VERBOSE_ARG '${hmSettingsDb}' '${settingsDb}'
'';
};
};
}