yt-dlp: add `settings` option

This commit is contained in:
Loïc Reynier 2022-09-09 09:56:07 +02:00 committed by Robert Helgesson
parent 41790ba656
commit f5e4614c11
No known key found for this signature in database
GPG Key ID: 36BDAA14C2797E89
6 changed files with 75 additions and 12 deletions

1
.github/CODEOWNERS vendored
View File

@ -314,6 +314,7 @@ Makefile @thiagokokada
/tests/modules/programs/xmobar @t4ccer
/modules/programs/yt-dlp.nix @marsam
/tests/modules/programs/yt-dlp @marsam
/modules/programs/z-lua.nix @marsam

View File

@ -6,6 +6,12 @@ let
cfg = config.programs.yt-dlp;
renderSettings = mapAttrsToList (name: value:
if isBool value then
if value then "--${name}" else "--no-${name}"
else
"--${name} ${toString value}");
in {
meta.maintainers = [ maintainers.marsam ];
@ -19,29 +25,48 @@ in {
description = "Package providing the <command>yt-dlp</command> tool.";
};
extraConfig = mkOption {
type = types.lines;
default = "";
settings = mkOption {
type = with types; attrsOf (oneOf [ bool int str ]);
default = { };
example = literalExpression ''
--embed-thumbnail
--embed-subs
--sub-langs all
--downloader aria2c
--downloader-args aria2c:'-c -x8 -s8 -k1M'
embed-thumbnail = true;
embed-subs = true;
sub-langs = "all";
downloader = "aria2c";
downloader-args = "aria2c:'-c -x8 -s8 -k1M'";
'';
description = ''
Configuration written to
<filename>$XDG_CONFIG_HOME/yt-dlp/config</filename>. See
<link xlink:href="https://github.com/yt-dlp/yt-dlp#configuration" />
<filename>$XDG_CONFIG_HOME/yt-dlp/config</filename>.
</para><para>
Options must be specified in their <quote>long form</quote>, for
example, <code>update = true;</code> instead of <code>U = true;</code>.
Short options can be specified in the <code>extraConfig</code> option.
See <link xlink:href="https://github.com/yt-dlp/yt-dlp#configuration"/>
for explanation about possible values.
'';
};
extraConfig = mkOption {
type = types.lines;
default = "";
example = ''
--update
-F
'';
description = ''
Extra configuration to add to
<filename>$XDG_CONFIG_HOME/yt-dlp/config</filename>.
'';
};
};
config = mkIf cfg.enable {
home.packages = [ cfg.package ];
xdg.configFile."yt-dlp/config" =
mkIf (cfg.extraConfig != "") { text = cfg.extraConfig; };
xdg.configFile."yt-dlp/config" = mkIf (cfg.settings != { }) {
text = concatStringsSep "\n"
(remove "" (renderSettings cfg.settings ++ [ cfg.extraConfig ])) + "\n";
};
};
}

View File

@ -155,6 +155,7 @@ import nmt {
./modules/programs/terminator
./modules/programs/waybar
./modules/programs/xmobar
./modules/programs/yt-dlp
./modules/services/barrier
./modules/services/devilspie2
./modules/services/dropbox

View File

@ -0,0 +1 @@
{ yt-dlp-simple-config = ./yt-dlp-simple-config.nix; }

View File

@ -0,0 +1,8 @@
--downloader aria2c
--downloader-args aria2c:'-c -x8 -s8 -k1M'
--no-embed-subs
--embed-thumbnail
--sub-langs all
--trim-filenames 30
--config-locations /home/user/.yt-dlp.conf

View File

@ -0,0 +1,27 @@
{ ... }:
{
programs.yt-dlp = {
enable = true;
settings = {
embed-thumbnail = true;
embed-subs = false;
sub-langs = "all";
downloader = "aria2c";
downloader-args = "aria2c:'-c -x8 -s8 -k1M'";
trim-filenames = 30;
};
extraConfig = ''
--config-locations /home/user/.yt-dlp.conf
'';
};
test.stubs.yt-dlp = { };
nmt.script = ''
assertFileExists home-files/.config/yt-dlp/config
assertFileContent home-files/.config/yt-dlp/config ${
./yt-dlp-simple-config-expected
}
'';
}