From 337bd0a6a55733fa55b885a8061f9f3eb15fe3c8 Mon Sep 17 00:00:00 2001 From: Ahmad Ansori Palembani Date: Tue, 16 Jul 2024 11:11:51 +0700 Subject: [PATCH] fix(nix): Symlink the apps, not the folder --- .config/nix/darwin/configuration.nix | 34 +++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/.config/nix/darwin/configuration.nix b/.config/nix/darwin/configuration.nix index 46262c3..b7b6544 100644 --- a/.config/nix/darwin/configuration.nix +++ b/.config/nix/darwin/configuration.nix @@ -1,4 +1,4 @@ -{ pkgs, vars, ... }: +{ pkgs, config, vars, ... }: { # I don't want to risk breaking my hackintosh setup in case Apple decided to @@ -57,6 +57,38 @@ # $ darwin-rebuild changelog system = { stateVersion = 4; + # 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 + # Original code: https://github.com/IvarWithoutBones/dotfiles/commit/0b3faad8bd1d0e1af6103caf59b206666ab742f4 + activationScripts.applications.text = pkgs.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 + ln -s "$src" "$nix_apps" + + # >> Original linking script - I don't use Spotlight + # 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 alias file to fileToAlias at applicationsFolder + # # 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 + # << Original linking script + done + ''; }; users.users.ziro = {