From 8438431b9f87e36df21da4ab4d025ba8b4eff937 Mon Sep 17 00:00:00 2001 From: nicoo Date: Wed, 18 Oct 2023 11:38:25 +0000 Subject: [PATCH] mpvScripts.buildLua: Handle scripts packaged as directories --- .../video/mpv/scripts/buildLua.nix | 34 ++++++++++++++++--- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/pkgs/applications/video/mpv/scripts/buildLua.nix b/pkgs/applications/video/mpv/scripts/buildLua.nix index 769e11798a6a..046b0fa2ea96 100644 --- a/pkgs/applications/video/mpv/scripts/buildLua.nix +++ b/pkgs/applications/video/mpv/scripts/buildLua.nix @@ -2,8 +2,18 @@ , stdenvNoCC }: let + inherit (lib) hasPrefix hasSuffix removeSuffix; escapedList = with lib; concatMapStringsSep " " (s: "'${escape [ "'" ] s}'"); fileName = pathStr: lib.last (lib.splitString "/" pathStr); + nameFromPath = pathStr: + let fN = fileName pathStr; in + if hasSuffix ".lua" fN then + fN + else if !(hasPrefix "." fN) then + "${fN}.lua" + else + null + ; scriptsDir = "$out/share/mpv/scripts"; in lib.makeOverridable ( @@ -13,8 +23,8 @@ lib.makeOverridable ( let # either passthru.scriptName, inferred from scriptPath, or from pname scriptName = (args.passthru or {}).scriptName or ( - if args ? scriptPath - then fileName args.scriptPath + if args ? scriptPath && nameFromPath args.scriptPath != null + then nameFromPath args.scriptPath else "${pname}.lua" ); scriptPath = args.scriptPath or "./${scriptName}"; @@ -26,8 +36,24 @@ lib.makeOverridable ( outputHashMode = "recursive"; installPhase = '' runHook preInstall - install -m644 -Dt "${scriptsDir}" \ - ${escapedList ([ scriptPath ] ++ extraScripts)} + + if [ -d "${scriptPath}" ]; then + [ -f "${scriptPath}/main.lua" ] || { + echo "Script directory '${scriptPath}' does not contain 'main.lua'" >&2 + exit 1 + } + [ ${with builtins; toString (length extraScripts)} -eq 0 ] || { + echo "mpvScripts.buildLua does not support 'extraScripts'" \ + "when 'scriptPath' is a directory" + exit 1 + } + mkdir -p "${scriptsDir}" + cp -a "${scriptPath}" "${scriptsDir}/${lib.removeSuffix ".lua" scriptName}" + else + install -m644 -Dt "${scriptsDir}" \ + ${escapedList ([ scriptPath ] ++ extraScripts)} + fi + runHook postInstall '';