Nixで困ったら
Nixで困った時の対応を書いていく。
nix developで実行した時とnix buildで異なる挙動をする
十中八九ファイルをgit addしていないのが原因なのでまずそれを確認する。
またNixのビルド環境は冪等性を担保するためネットワーク通信ができないようになっている。
もし発生したエラーがネットワーク関連のエラーなら、それらの処理をしないような方法を考える。
buildPhaseとかのbashで変数のテンプレート展開をしたい
bashにはテンプレート展開という便利な機能があるのだけど、これはNix式の変数展開と構文が被っている。
なのでそのまま使うとエラーになったり、Nix側の変数が埋め込まれたりと予期しない動作をすることがある。
これを避けるにはbashの変数展開に使う$の前に''(シングルクウォーテーション2つ)を付ける
code:nix
buildPwhase = ''
for dir in */; do
dir=''${dir%/} # 変数展開$の前に''を付けている
echo "$dir/$dir.md"
marp --allow-local-files "$dir/$dir.md" -o "./dist/$dir.pdf"
fi
done
'';
buildPhaseとかでプログラムが$HOME配下に書き込みをしようとしてbuildが失敗する
$HOME配下に書き込むことは権限の関係で出来無いので、/tmpに向ける。
code:sh
export HOME="$(mktemp -d)"
home-managerのオプションが分からない。
このサイトで検索をかけられる。
Kittyとかが動かない。
ダウンロードしてきたシングルバイナリなアプリを動かしたい