😇

Darwin環境のNixでApplicationをsymlink以外の方法で管理する

2024/10/20に公開

TL;DR

macOSのバージョンを上げたことで問題の大部分が解決していたようです。特に困った経験が無いのであれば何も対応しない方が良さそうです。

はじめに

Nixは強力なパッケージマネージャであり、Darwin (macOS) 環境でも動作します。
当然、GUIアプリケーションの管理も可能です。ここではhome-managerを利用します。

検証環境

macOSの仕様と制約、その回避

macOSでは /Applications~/Applications ディレクトリに配置されたアプリケーションを認識します。App StoreやHomebrewでインストールしたアプリケーションもそこに配置されます。
home-managerはNixの基本的な戦略に則って~/Applications配下にsymlinkを作成します。
symlinkはエイリアス(Finderエイリアス)の上位機能として認知されていますが、厳密にはこれは誤りであり、挙動がわずかに違います。代表的なものを挙げると.appのsymlinkはSpotlight検索で表示されません。[1]その他、厳密な検証ができていませんがエイリアスを利用することで問題が解決した経験が何度かあります。[2]

ここではhome-managerhome.activationでエイリアスを作成することでsymlinkの問題に対応します。エイリアスの作成にはmkaliasを利用します。

https://github.com/ttak0422/dotfiles/blob/4402c6fbc5b7c86632a45375dd76d0b528c82986/nix/modules/hm-darwin/prelude.nix#L12-L40

最後に

macOSを好んで利用していない以上、原因の究明にはあまり注力しておりません。認識の齟齬などあればコメントで指摘してくださると他の方のためになります。

脚注
  1. エイリアスを利用してアプリケーションを導入した場合も、通常とは表示のされ方が異なります。 ↩︎

  2. こちらもmacOSの更新で問題が解消されていそうです。具体的には、Nixで管理するEmacsやターミナルがAquaSKKで認識されず、AquaSKKの無効化設定を有効化できないためにEmacsやVim環境でSKKが干渉する問題や、同じくNixで管理しているYabaiでEmacs (GUI) をうまく制御できないなどの問題が発生していました。 ↩︎

  3. 参考 Bypassing macOS TCC User Privacy Protections By Accident and Design ↩︎

Discussion