nixfiles/lib/darwin/apps/common.nix

100 lines
No EOL
2.6 KiB
Nix

{ wget, lib }:
rec {
download = {
url,
params ? "",
var ? "DOWNLOADED_FILE"
}: ''
echo "Downloading" ${lib.escapeShellArg url}"..."
${var}=$(mktemp)
${wget}/bin/wget ${lib.escapeShellArg url} ${params} -q --show-progress -O ${"$" + var}
'';
withMountedDmg = path: shell: ''
_result=$(hdiutil mount ${path} | tail -n1)
DMG_DEVICE=$(echo "$_result" | awk '{print $1}')
DMG_MOUNTPOINT=$(echo "$_result" | perl -lane 'print "@F[2..$#F]"')
unset _result
function _unmount {
hdiutil unmount $DMG_DEVICE > /dev/null
}
# trap _unmount ERR exit
${shell}
_unmount
trap - ERR exit
unset DMG_DEVICE
unset DMG_MOUNTPOINT
'';
installAppFromDmg = { dmg, filename }: withMountedDmg dmg ''
if [ ! -d "$DMG_MOUNTPOINT/"${lib.escapeShellArg filename} ]; then
echo "Error: file not found:" ${lib.escapeShellArg filename}
exit 1
fi
cp -r "$DMG_MOUNTPOINT/"${lib.escapeShellArg filename} /Applications
'';
downloadAndInstallDmgApp = {
url,
filename,
params ? "",
}: ''
if [ ! -d "/Applications/"${lib.escapeShellArg (builtins.baseNameOf filename)} ]; then
${download { inherit url params; }}
${installAppFromDmg { dmg = "$DOWNLOADED_FILE"; inherit filename; }}
rm -rf $DOWNLOADED_FILE
fi
'';
downloadAndInstallDmgPkg = {
url,
filename,
condition,
params ? "",
}: ''
if [ ${condition} ]; then
${download { inherit url params; }}
${withMountedDmg "$DOWNLOADED_FILE" ''
installer -pkg "$DMG_MOUNTPOINT/"${lib.escapeShellArg filename} -target /
''}
rm -rf $DOWNLOADED_FILE
fi
'';
downloadAndInstallZipApp = {
url,
filename,
params ? "",
renameTo ? null,
afterInstall ? ""
}: let
conditionFile = if renameTo == null then filename else renameTo;
in ''
if [ ! -d "/Applications/"${lib.escapeShellArg (builtins.baseNameOf conditionFile)} ]; then
${download { inherit url params; }}
tmpdir=$(mktemp -d)
unzip -q $DOWNLOADED_FILE -d $tmpdir
if [ ! -d "$tmpdir/"${lib.escapeShellArg filename} ]; then
echo "Error: file not found:" ${lib.escapeShellArg filename}
rm -rf $DOWNLOADED_FILE $tmpdir
exit 1
fi
${if (renameTo != null) then ''
mv "$tmpdir/"${lib.escapeShellArg filename} "$tmpdir/"${lib.escapeShellArg renameTo}
mv "$tmpdir/"${lib.escapeShellArg renameTo} /Applications
'' else ''
mv "$tmpdir/"${lib.escapeShellArg filename} /Applications
''}
rm -rf $DOWNLOADED_FILE $tmpdir
${afterInstall}
fi
'';
}