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 + } + ''; +}