7a40437bdd
Older macOS cannot interpret the `CFBundleIconFiles` key so we cannot rewrite the `CFBundleIconFile` entry without special consideration. I opted to fix this by inverting the squircle logic. We always add both the `CFBundleIconFile` and `CFBundleIconFiles` keys. The former is necessary for at least macOS 10.13 and probably 10.12. The latter seems to be ignored on those versions and overrides the former on newer versions of macOS. Inverting the logic also allows us to rely on the `toPlist` generator to generate the XML syntax, which is a nice bonus.
40 lines
1010 B
Nix
40 lines
1010 B
Nix
{ writeScriptBin, lib, ... }:
|
|
|
|
let
|
|
pListText = lib.generators.toPlist { } {
|
|
CFBundleDevelopmentRegion = "English";
|
|
CFBundleExecutable = "$name";
|
|
CFBundleIconFile = "$icon";
|
|
CFBundleIconFiles = [ "$icon" ];
|
|
CFBundleIdentifier = "org.nixos.$name";
|
|
CFBundleInfoDictionaryVersion = "6.0";
|
|
CFBundleName = "$name";
|
|
CFBundlePackageType = "APPL";
|
|
CFBundleSignature = "???";
|
|
};
|
|
in writeScriptBin "write-darwin-bundle" ''
|
|
shopt -s nullglob
|
|
|
|
readonly prefix=$1
|
|
readonly name=$2
|
|
readonly exec=$3
|
|
readonly icon=$4.icns
|
|
readonly squircle=''${5:-1}
|
|
readonly plist=$prefix/Applications/$name.app/Contents/Info.plist
|
|
|
|
cat > "$plist" <<EOF
|
|
${pListText}
|
|
EOF
|
|
|
|
if [[ $squircle == 0 || $squircle == "false" ]]; then
|
|
sed '/CFBundleIconFiles/,\|</array>|d' -i "$plist"
|
|
fi
|
|
|
|
cat > "$prefix/Applications/$name.app/Contents/MacOS/$name" <<EOF
|
|
#!/bin/bash
|
|
exec $prefix/bin/$exec
|
|
EOF
|
|
|
|
chmod +x "$prefix/Applications/$name.app/Contents/MacOS/$name"
|
|
''
|