Nix flakeでmacOS、WSL、Linuxの開発環境を宣言的に管理する。WSLではWindows側のcompanion設定も扱う。
前提はNix(flakes有効)とこのリポジトリのclone。macOSではHomebrewも事前にインストールする。GPG鍵やsecretsが無くてもswitchは完結する。
NixOS以外では、初回にOS側のNix daemon設定を同期する。
apply-nix-settingsは/etc/nix/nix.confが同じディレクトリのnix.custom.confをincludeしている環境向け。
installerが管理する設定との衝突を避けるため、対応していない構成は自動変更せず停止する。その場合はincludeを追加するか、daemon設定を別管理するか、この手順をskipしてswitchに進む。skipしても構成は適用できるが、このflake向けのbinary cacheとtrusted-user設定はdaemonへ反映されない。
git clone https://github.com/cons-tan-tan/dotfiles.git ~/ghq/github.com/cons-tan-tan/dotfiles
cd ~/ghq/github.com/cons-tan-tan/dotfiles
nix run .#apply-nix-settingsapply-nix-settingsの案内に従ってNix daemonを再起動してから、構成を適用する。
nix run .#switchsecretsを使う端末の追加手順はsecrets/README.mdを参照する。
既存のflakes対応Nix環境から、Home Manager設定を含むWSLイメージを生成する。
sudo nix run .#nixosConfigurations.wsl.config.system.build.tarballBuilder生成されたnixos.wslをWindows側の任意のディレクトリへコピーし、そのディレクトリで次を実行する。
wsl --install --from-file .\nixos.wsl --name NixOS必要なら初回起動後にpasswdでパスワードを設定する。以後は通常のclone先でnix run .#switchを使い、apply-nix-settingsは実行しない。Windows on Armの構成名はwsl-aarch64。
| コマンド | 内容 |
|---|---|
nix run .#switch |
ホスト構成をビルドして適用 |
nix run .#build |
ホスト構成を適用せずビルドのみ |
nix run .#update |
flake.lock を更新 |
nix run .#update-pins -- --list |
packageごとのupstream同期対象を表示 |
nix run .#write-flake |
input moduleからflake.nixを再生成 |
nix run .#apply-winget |
switch後にWindows側のpackage構成を適用(WSLのみ) |
そのほかの公開appはnix flake showで確認する。
update-pinsは各packageのpassthru.updateScriptを実行する。対象を省略すると全件を更新し、nix run .#update-pins -- herdrのように名前を渡すと1件だけ更新する。更新にはcleanなworktreeが必要で、使い捨てのcloneで全対象が成功してから差分を反映する。--checkを付けると差分を反映せず、更新が必要な場合に失敗する。通常のpackage更新はnix-updateへ委譲し、複数assetやflake inputを同時に扱う更新だけを各featureのscriptで補う。GitHub releaseを参照する対象には、gh auth loginまたはGH_TOKENによる認証が必要となる。旧updaterの--force、--jobs、--retryはpackage側へ更新処理を移したため廃止した。
flake-file.inputsを定義するmoduleを直接変更した場合は、nix run .#write-flakeでflake.nixを再生成する。inputを所有するupdateScriptは、flake.nixとflake.lockも更新する。
既定はCC0-1.0(LICENSE)。由来が異なるファイルはsidecar(.license)で明示(REUSE準拠)。