30 lines
1.5 KiB
Nix
30 lines
1.5 KiB
Nix
{config, pkgs, lib, ...}: {
|
|
# Nix-darwin does not link installed applications to the user environment. This means apps will not show up
|
|
# in spotlight, and when launched through the dock they come with a terminal window. This is a workaround.
|
|
# Upstream issue: https://github.com/LnL7/nix-darwin/issues/214
|
|
system.activationScripts.applications.text = lib.mkForce ''
|
|
echo "setting up /Applications..." >&2
|
|
applications="/Applications"
|
|
nix_apps="$applications/Nix Apps"
|
|
|
|
# Delete the directory to remove old links
|
|
rm -rf "$nix_apps"
|
|
mkdir -p "$nix_apps"
|
|
find ${config.system.build.applications}/Applications -maxdepth 1 -type l -exec readlink '{}' + |
|
|
while read src; do
|
|
# Spotlight does not recognize symlinks, it will ignore directory we link to the applications folder.
|
|
# It does understand MacOS aliases though, a unique filesystem feature. Sadly they cannot be created
|
|
# from bash (as far as I know), so we use the oh-so-great Apple Script instead.
|
|
/usr/bin/osascript -e "
|
|
set fileToAlias to POSIX file \"$src\"
|
|
set applicationsFolder to POSIX file \"$nix_apps\"
|
|
tell application \"Finder\"
|
|
make new alias at applicationsFolder to fileToAlias
|
|
# This renames the alias; 'mpv.app alias' -> 'mpv.app'
|
|
set name of result to \"$(rev <<< "$src" | cut -d'/' -f1 | rev)\"
|
|
end tell
|
|
" 1>/dev/null
|
|
done
|
|
'';
|
|
}
|