{ stdenvNoCC, writeShellApplication, makeWrapper, rsync, kobo-utils, lib, ... }: src: let deployScript = writeShellApplication { name = "deploy"; runtimeInputs = [ rsync kobo-utils ]; text = '' PAYLOAD="./payload" if [[ ! -d "$PAYLOAD" ]]; then >&2 echo "./payload is not a directory I can copy..." exit 1 fi KOBOMNT="$(kobo-find -f -w)" KOBODIR="$KOBOMNT/.kobo" if [[ -z "$KOBOMNT" ]]; then >&2 echo "Cannot find mounted kobo" exit 1 elif [[ ! -d "$KOBODIR" ]]; then >&2 echo "$KOBODIR does not appear to exist. Is this really a kobo?" exit 1 fi echo "Deploying payload" rsync -rv --executability --chmod=u+w "$PAYLOAD/" "$KOBODIR" ''; }; in stdenvNoCC.mkDerivation (finalAttrs: { name = "deploy-kobo"; inherit src; nativeBuildInputs = [ makeWrapper ]; buildInputs = [ kobo-utils rsync ]; phases = "installPhase"; installPhase = '' runHook preInstall mkdir -p $out cp -r $src $out/payload mkdir -p $out/bin makeWrapper "${lib.getExe deployScript}" $out/bin/deploy --chdir "$out" runHook postInstall ''; meta = { mainProgram = "deploy"; }; })