diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 746db552..e4f70fd6 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -203,8 +203,8 @@ Makefile @thiagokokada /modules/programs/micro.nix @MForster /tests/modules/programs/micro @MForster -/modules/programs/mpv.nix @tadeokondrak @thiagokokada -/tests/modules/programs/mpv @thiagokokada +/modules/programs/mpv.nix @tadeokondrak @thiagokokada @chuangzhu +/tests/modules/programs/mpv @thiagokokada @chuangzhu /modules/programs/mu.nix @KarlJoad diff --git a/modules/programs/mpv.nix b/modules/programs/mpv.nix index 47413490..1d0b24d4 100644 --- a/modules/programs/mpv.nix +++ b/modules/programs/mpv.nix @@ -34,6 +34,12 @@ let listsAsDuplicateKeys = true; }; + renderScriptOptions = generators.toKeyValue { + mkKeyValue = + generators.mkKeyValueDefault { mkValueString = renderOption; } "="; + listsAsDuplicateKeys = true; + }; + renderProfiles = generators.toINI { mkKeyValue = generators.mkKeyValueDefault { mkValueString = renderOptionValue; } "="; @@ -85,6 +91,27 @@ in { ''; }; + scriptOpts = mkOption { + description = '' + Script options added to + $XDG_CONFIG_HOME/mpv/script-opts/. See + + mpv + 1 + + for the full list of options of builtin scripts. + ''; + type = types.attrsOf mpvOptions; + default = { }; + example = { + osc = { + scalewindowed = 2.0; + vidscale = false; + visibility = "always"; + }; + }; + }; + config = mkOption { description = '' Configuration written to @@ -184,7 +211,13 @@ in { (mkIf (cfg.bindings != { }) { xdg.configFile."mpv/input.conf".text = renderBindings cfg.bindings; }) + { + xdg.configFile = mapAttrs' (name: value: + nameValuePair "mpv/script-opts/${name}.conf" { + text = renderScriptOptions value; + }) cfg.scriptOpts; + } ]); - meta.maintainers = with maintainers; [ tadeokondrak thiagokokada ]; + meta.maintainers = with maintainers; [ tadeokondrak thiagokokada chuangzhu ]; } diff --git a/tests/modules/programs/mpv/default.nix b/tests/modules/programs/mpv/default.nix index 6e071610..66932b0b 100644 --- a/tests/modules/programs/mpv/default.nix +++ b/tests/modules/programs/mpv/default.nix @@ -1,5 +1,5 @@ { # Temporarily commented until fixed for recent changes in Nixpkgs. - # mpv-example-settings = ./mpv-example-settings.nix; - # mpv-invalid-settings = ./mpv-invalid-settings.nix; + mpv-example-settings = ./mpv-example-settings.nix; + mpv-invalid-settings = ./mpv-invalid-settings.nix; } diff --git a/tests/modules/programs/mpv/mpv-example-settings-expected-osc-opts b/tests/modules/programs/mpv/mpv-example-settings-expected-osc-opts new file mode 100644 index 00000000..db377967 --- /dev/null +++ b/tests/modules/programs/mpv/mpv-example-settings-expected-osc-opts @@ -0,0 +1,3 @@ +scalewindowed=2.000000 +vidscale=no +visibility=always diff --git a/tests/modules/programs/mpv/mpv-example-settings.nix b/tests/modules/programs/mpv/mpv-example-settings.nix index 9bb53e57..58467de0 100644 --- a/tests/modules/programs/mpv/mpv-example-settings.nix +++ b/tests/modules/programs/mpv/mpv-example-settings.nix @@ -18,6 +18,14 @@ cache-default = 4000000; }; + scriptOpts = { + osc = { + scalewindowed = 2.0; + vidscale = false; + visibility = "always"; + }; + }; + profiles = { fast = { vo = "vdpau"; }; "protocol.dvd" = { @@ -38,6 +46,9 @@ assertFileContent \ home-files/.config/mpv/input.conf \ ${./mpv-example-settings-expected-bindings} + assertFileContent \ + home-files/.config/mpv/script-opts/osc.conf \ + ${./mpv-example-settings-expected-osc-opts} ''; }; diff --git a/tests/modules/programs/mpv/mpv-invalid-settings.nix b/tests/modules/programs/mpv/mpv-invalid-settings.nix index 1c4a80c1..701c823f 100644 --- a/tests/modules/programs/mpv/mpv-invalid-settings.nix +++ b/tests/modules/programs/mpv/mpv-invalid-settings.nix @@ -10,24 +10,12 @@ nixpkgs.overlays = [ (self: super: { - mpv-unwrapped = pkgs.runCommandLocal "mpv" { - version = "0"; - passthru = { - lua.luaversion = "0"; - luaEnv = "/dummy"; - vapoursynthSupport = false; - }; - } '' - mkdir -p $out/bin $out/Applications/mpv.app/Contents/MacOS - touch $out/bin/{,u}mpv $out/Applications/mpv.app/Contents/MacOS/mpv - chmod 755 $out/bin/{,u}mpv $out/Applications/mpv.app/Contents/MacOS/mpv - ''; - mpvDummy = config.lib.test.mkStubPackage { }; mpvScript = pkgs.runCommandLocal "mpvScript" { scriptName = "something"; } "mkdir $out"; }) ]; + test.stubs.mpvDummy = { }; test.asserts.assertions.expected = [ ''