Nix でのビルド時に private なリソースにアクセスする
HERP では多くの成果物が Nix を用いてビルドされている.例として,アプリケーションの Docker image,npm ライブラリの tarball,Helm chart を元にした Kubernetes の manifest ファイルなどが挙げられる.
"purely functional package manager" である Nix を利用すると高い再現性を持ったビルドを実現できるが,purely functional であるがゆえに,private なリソースに依存したビルドには一工夫が必要になる.private なリソースにアクセスするためには概して何らかの credential が必要になるからだ.そのような credential はビルド手順*1に残したくないし,仮に残したとしても,一定時間で expire したりするのでいずれにしても再現性が得られない.
もちろん,ビルド時に private なリソースを利用できないのでは営利企業内で利用するのは難しい.そこで,部分的に再現性を諦めるための抜け道が用意されている.本稿では fetchurl
関数の netrcPhase
と netrcImpureEnvVars
オプションを利用する方法を紹介する.
なお,本稿で単に fetchurl
と書いた場合には,builtins.fetchurl
ではなく NixOS/nixpkgs
リポジトリに定義されている fetchurl
関数を指すものとする.
dotfiles を Nix + Home Manager に移行した
「ゴミの収集が止まる年末に大掃除をするのは非合理だ」という言説を見かけた.「一理ある」と感じたので,特に家の大掃除などはしないことに決め,代わりに dotfiles の大掃除をすることにした.プロたるもの,日頃から*1自らの仕事環境に対する投資を惜しんではならない.
筆者は Nix ユーザであるため,この年末年始の休暇を用いて Home Manager を導入したいと考えており,実際に移行を行った.
この記事では,Home Manager の利点や導入手順,実際の導入にあたって取った選択や tips を紹介する.
なお,筆者が用いているのは Intel および ARM プロセッサの macOS Monterey で,Zsh, Neovim, tmux などの上で生活している.もちろん Nix は GNU Linux にも対応しているので,仮に今後 Linux マシンをセットアップする機会があっても,滞りなく開発環境を構築できることが期待される.
Nix でのビルド時に Puppeteer を使う場合には $FONTCONFIG_FILE を設定しよう
Nix で Haskell IDE Engine をシュッと入れる
みなさん,Haskell やってますか?普通に Haskell IDE Engine を入れようとするとビルドにメッチャ時間がかかって「地獄か?」という感じがするので,Nix でシュッと入れていきましょう.
Nix Expression Language で遅延リストを作ってみる
この記事は CAMPHOR- Advent Calendar 2018 15日目の記事です.14日目の記事は @Rtm6Lgo の とある研究室の運営のエモいお話 でした.
Nix Expression Language を用いて遅延リストを作る.普段は「ジェネレータを作ったり、遅延評価してみる」だが,Nix Expression Language は基本的に純粋なので,mutable な state をもつイテレータや,それを生成するジェネレータという概念はなじまない.