From 5f9bbb98916db6c1407fb86ad41168fd3706cd01 Mon Sep 17 00:00:00 2001 From: Daniel Kempkens Date: Sun, 1 Oct 2023 17:34:28 +0200 Subject: [PATCH] darwin: Use mkalias to link apps --- flake.lock | 21 +++++++++++++++++++++ flake.nix | 5 +++++ home/hosts/Styx.nix | 34 +++++++++++++++++++++++++++++++++- system/flakes/Styx.nix | 4 +++- 4 files changed, 62 insertions(+), 2 deletions(-) diff --git a/flake.lock b/flake.lock index d3fdc48..0c97617 100644 --- a/flake.lock +++ b/flake.lock @@ -313,6 +313,26 @@ "type": "github" } }, + "mkalias": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1678761502, + "narHash": "sha256-tL3C/b2BPOGQpV287wECDCDWmKwwPvezAAN3qz7N07M=", + "owner": "reckenrode", + "repo": "mkalias", + "rev": "8a5478cdb646f137ebc53cb9d235f8e5892ea00a", + "type": "github" + }, + "original": { + "owner": "reckenrode", + "repo": "mkalias", + "type": "github" + } + }, "neovim-flake": { "inputs": { "flake-utils": "flake-utils_2", @@ -528,6 +548,7 @@ "flake-parts": "flake-parts", "flake-root": "flake-root", "home-manager": "home-manager", + "mkalias": "mkalias", "nifoc-overlay": "nifoc-overlay", "nix-darwin": "nix-darwin", "nixos-hardware": "nixos-hardware", diff --git a/flake.nix b/flake.nix index f5f8250..fb1f353 100644 --- a/flake.nix +++ b/flake.nix @@ -62,6 +62,11 @@ url = "github:serokell/deploy-rs"; inputs.nixpkgs.follows = "nixpkgs"; }; + + mkalias = { + url = "github:reckenrode/mkalias"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; outputs = inputs@{ flake-parts, ... }: diff --git a/home/hosts/Styx.nix b/home/hosts/Styx.nix index a09131c..af7576c 100644 --- a/home/hosts/Styx.nix +++ b/home/hosts/Styx.nix @@ -1,4 +1,4 @@ -{ pkgs, ... }: +{ pkgs, lib, config, ... }: { imports = [ @@ -42,6 +42,8 @@ ../programs/yt-dlp.nix ]; + disabledModules = [ "targets/darwin/linkapps.nix" ]; + home = { stateVersion = "22.11"; @@ -75,5 +77,35 @@ xxHash xz ]; + + activation.aliasApplications = lib.mkIf pkgs.stdenv.hostPlatform.isDarwin ( + let + apps = pkgs.buildEnv { + name = "home-manager-applications"; + paths = config.home.packages; + pathsToLink = "/Applications"; + }; + + lastAppsFile = "${config.xdg.stateHome}/nix/.apps"; + in + lib.hm.dag.entryAfter [ "writeBoundary" ] '' + last_apps=$(cat "${lastAppsFile}" 2>/dev/null || echo "") + next_apps=$(readlink -f ${apps}/Applications/* | sort) + + if [ "$last_apps" != "$next_apps" ]; then + echo "Apps have changed. Updating macOS aliases..." + + apps_path="$HOME/Applications/Home Manager Apps" + $DRY_RUN_CMD mkdir -p "$apps_path" + + $DRY_RUN_CMD ${pkgs.fd}/bin/fd \ + -t l -d 1 . ${apps}/Applications \ + -x $DRY_RUN_CMD "${pkgs.mkalias}/bin/mkalias" \ + -L {} "$apps_path/{/}" + + [ -z "$DRY_RUN_CMD" ] && echo "$next_apps" > "${lastAppsFile}" + fi + '' + ); }; } diff --git a/system/flakes/Styx.nix b/system/flakes/Styx.nix index 4608358..de1a2a1 100644 --- a/system/flakes/Styx.nix +++ b/system/flakes/Styx.nix @@ -4,8 +4,9 @@ let default-system = "aarch64-darwin"; overlay-x86 = _: _: { pkgs-x86 = import nixpkgs { system = "x86_64-darwin"; }; }; - overlay-agenix = inputs.agenix.overlays.default; + overlay-agenix = agenix.overlays.default; overlay-attic = inputs.attic.overlays.default; + overlay-mkalias = _: _: { inherit (inputs.mkalias.packages.${default-system}) mkalias; }; overlay-nifoc = inputs.nifoc-overlay.overlay; nixpkgsConfig = { @@ -13,6 +14,7 @@ let overlay-x86 overlay-agenix overlay-attic + overlay-mkalias overlay-nifoc ];