diff --git a/modules/programs/animdl.nix b/modules/programs/animdl.nix new file mode 100644 index 000000000..98e31ac34 --- /dev/null +++ b/modules/programs/animdl.nix @@ -0,0 +1,54 @@ +{ + lib, + pkgs, + config, + ... +}: +let + inherit (lib) + mkIf + mkEnableOption + mkPackageOption + mkOption + ; + + cfg = config.programs.animdl; + yamlFormat = pkgs.formats.yaml { }; +in +{ + meta.maintainers = with lib.hm.maintainers; [ aguirre-matteo ]; + options.programs.animdl = { + enable = mkEnableOption "animdl"; + package = mkPackageOption pkgs "animdl" { nullable = true; }; + settings = mkOption { + inherit (yamlFormat) type; + default = { }; + example = { + default_provider = "animixplay"; + site_urls.animixplay = "https://www.animixplay.to/"; + quality_string = "best[subtitle]/best"; + default_player = "mpv"; + ffmpeg = { + executable = "ffmpeg"; + hls_download = false; + submerge = true; + }; + }; + description = '' + Configuration settings for animdl. All the available options can be found here: + . + ''; + }; + }; + + config = mkIf cfg.enable { + assertions = [ + (lib.hm.assertions.assertPlatform "programs.animdl" pkgs lib.platforms.linux) + ]; + + home.packages = mkIf (cfg.package != null) [ cfg.package ]; + home.file.".config/animdl/config.yml" = mkIf (cfg.settings != { }) { + source = yamlFormat.generate "animdl.yml" cfg.settings; + }; + }; +} diff --git a/tests/modules/programs/animdl/config.yml b/tests/modules/programs/animdl/config.yml new file mode 100644 index 000000000..380b5df8f --- /dev/null +++ b/tests/modules/programs/animdl/config.yml @@ -0,0 +1,9 @@ +default_player: mpv +default_provider: animixplay +ffmpeg: + executable: ffmpeg + hls_download: false + submerge: true +quality_string: best[subtitle]/best +site_urls: + animixplay: https://www.animixplay.to/ diff --git a/tests/modules/programs/animdl/default.nix b/tests/modules/programs/animdl/default.nix new file mode 100644 index 000000000..f56d0474f --- /dev/null +++ b/tests/modules/programs/animdl/default.nix @@ -0,0 +1,5 @@ +{ lib, pkgs, ... }: + +lib.optionalAttrs pkgs.stdenv.hostPlatform.isLinux { + animdl-example-config = ./example-config.nix; +} diff --git a/tests/modules/programs/animdl/example-config.nix b/tests/modules/programs/animdl/example-config.nix new file mode 100644 index 000000000..84cd45953 --- /dev/null +++ b/tests/modules/programs/animdl/example-config.nix @@ -0,0 +1,22 @@ +{ + programs.animdl = { + enable = true; + settings = { + default_provider = "animixplay"; + site_urls.animixplay = "https://www.animixplay.to/"; + quality_string = "best[subtitle]/best"; + default_player = "mpv"; + ffmpeg = { + executable = "ffmpeg"; + hls_download = false; + submerge = true; + }; + }; + }; + + nmt.script = '' + assertFileExists home-files/.config/animdl/config.yml + assertFileContent home-files/.config/animdl/config.yml \ + ${./config.yml} + ''; +}