diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index beb9e5eb..8eb769e9 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -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
diff --git a/modules/programs/yt-dlp.nix b/modules/programs/yt-dlp.nix
index 19e9c7e0..0ee80ae8 100644
--- a/modules/programs/yt-dlp.nix
+++ b/modules/programs/yt-dlp.nix
@@ -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 yt-dlp 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
- $XDG_CONFIG_HOME/yt-dlp/config. See
-
+ $XDG_CONFIG_HOME/yt-dlp/config.
+
+ Options must be specified in their long form
, for
+ example, update = true;
instead of U = true;
.
+ Short options can be specified in the extraConfig
option.
+ See
for explanation about possible values.
'';
};
+
+ extraConfig = mkOption {
+ type = types.lines;
+ default = "";
+ example = ''
+ --update
+ -F
+ '';
+ description = ''
+ Extra configuration to add to
+ $XDG_CONFIG_HOME/yt-dlp/config.
+ '';
+ };
};
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";
+ };
};
}
diff --git a/tests/default.nix b/tests/default.nix
index 5b173a7f..0a09e61c 100644
--- a/tests/default.nix
+++ b/tests/default.nix
@@ -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
diff --git a/tests/modules/programs/yt-dlp/default.nix b/tests/modules/programs/yt-dlp/default.nix
new file mode 100644
index 00000000..4b09a9c5
--- /dev/null
+++ b/tests/modules/programs/yt-dlp/default.nix
@@ -0,0 +1 @@
+{ yt-dlp-simple-config = ./yt-dlp-simple-config.nix; }
diff --git a/tests/modules/programs/yt-dlp/yt-dlp-simple-config-expected b/tests/modules/programs/yt-dlp/yt-dlp-simple-config-expected
new file mode 100644
index 00000000..f5062dde
--- /dev/null
+++ b/tests/modules/programs/yt-dlp/yt-dlp-simple-config-expected
@@ -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
+
diff --git a/tests/modules/programs/yt-dlp/yt-dlp-simple-config.nix b/tests/modules/programs/yt-dlp/yt-dlp-simple-config.nix
new file mode 100644
index 00000000..229f0438
--- /dev/null
+++ b/tests/modules/programs/yt-dlp/yt-dlp-simple-config.nix
@@ -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
+ }
+ '';
+}