blog.anqou.net
rss
author
tags

NixOS で宣言的に symlink を管理する

NixOS では通常の Linux distro と異なるシステムファイルの配置が行われるため、ソフトウェアによっては期待しているパスに必要なファイルが無くエラーになってしまうことがあります。そのような場合にはソフトウェア側の修正を行うのが正攻法ですが、様々な理由からそれが難しいこともあります。

そこでワークアラウンドとして、期待しているパスから必要なファイルに対してシンボリックリンク(symlink)を張ることで問題を解決できることがあります。シンボリックリンクは通常 ln コマンドを用いて作成しますが、この記事ではこれを宣言的に管理する方法を説明します。

まず、シンボリックリンクを配置したい場所が Home Manager の管理下にある場合は home.fileconfig.lib.file.mkOutOfStoreSymlink を組み合わせて使います:

home.file = {
  your-favorite-name = {
    target = "path/to/symlink";
    source = config.lib.file.mkOutOfStoreSymlink /absolute/path/to/source;
  };
};

Home Manager の管理下に無い場合は systemd tmpfiles.d を使います。NixOS Options の systemd.tmpfiles が使えます:

systemd.tmpfiles.rules = [
  "L? /path/to/symlink - - - - /path/to/source"
];

rule のフォーマットは公式のドキュメントを参照してください:

https://www.freedesktop.org/software/systemd/man/latest/tmpfiles.d.html