Skip to content

refactor(nix): flake-parts系flakeでflakeを簡素化しビルドキャッシュと開発環境を整備 - #121

Merged
pranc1ngpegasus merged 1 commit into
mainfrom
refactor/nix-flake-parts
Aug 4, 2026
Merged

refactor(nix): flake-parts系flakeでflakeを簡素化しビルドキャッシュと開発環境を整備#121
pranc1ngpegasus merged 1 commit into
mainfrom
refactor/nix-flake-parts

Conversation

@pranc1ngpegasus

Copy link
Copy Markdown
Member

概要

Nix flake を flake-parts のエコシステム(treefmt-nix / git-hooks.nix)を活用して簡素化し、ビルドキャッシュと開発環境セットアップを容易にしました。あわせて flake.nix明示的な root perSystem を置き、コードを追いやすい構成に整理しています。

主な変更

構成をわかりやすく(明示的な root perSystem)

  • flake.nix の root perSystempkgs / rustToolchain / swiftformat一度だけ構築し、各ヘルパー(nix/packages.nix / nix/formatting.nix / nix/dev-shells.nix)へ名前付き引数で明示的に渡す構成にしました。
  • 従来の _module.args による暗黙的な共有をやめ、各ファイルの関数シグネチャを見れば「何を必要とし何を返すか」が一目で分かるようにしています。データの流れが上から下に追えます。
  • ヘルパーは flake-parts モジュールから引数・戻り値が明示的なプレーン関数へ変換(packages.nix{ packages, checks }formatting.nix{ treefmt, pre-commit }dev-shells.nix → devShells セット)。不要になった nix/parts/toolchain.nix は削除。

フォーマット統一(treefmt-nix)

  • nixfmt / rustfmt / swiftformat を treefmt で一元化し、formatternix fmt)と treefmt チェック(nix flake check)として公開。従来の nixfmt formatter と Crane の cargoFmt チェックを置換しつつ、元の formatting チェック名も維持。
  • rustfmt は workspace の toolchain にピン留めし CI と整合。

開発環境をターンキー化(git-hooks.nix)

  • pre-commit(treefmt + clippy)を nix develop 入室時に自動導入。フレッシュクローンでも一発でセットアップ完了。
  • clippy フックは Crane の clippy チェックとスコープを一致(--workspace --exclude wisp-desktop --all-targets)。

ビルドキャッシュを容易に

  • nixConfig で nix-community バイナリキャッシュを宣言(公式の trusted key 付き)。
  • default dev shell に cachix CLI を同梱(プロジェクト用キャッシュの cachix use 手順は README に記載)。
  • Crane の buildDepsOnly 成果物を package / clippy / tests 間で共有し、ローカルキャッシュ再利用を最大化。

CI

  • パスフィルタに nix/** を追加(nix.yaml / rust.yaml / rust-macos.yaml / swift.yaml)。Nix ロジックを nix/ へ分割したことで漏れていた再トリガを補完。

互換性(すべて維持)

Windows クロスコンパイル、sherpa-onnx の Linux アーカイブ取得、macOS の Xcode/DEVELOPER_DIR ハンドリング、swiftformat のピン留め、および全 packages / checks / devShells 出力を維持しています。

検証(aarch64-darwin)

  • nixfmt --check flake.nix nix → exit 0
  • nix flake check --no-build → 全出力グリーン
  • 出力の完全一致を確認:
    • Linux packages: default, wisp-mcp, wisp-windows
    • Linux checks: clippy, formatting, tests, treefmt, wisp-mcp
    • Darwin packages: default, wisp-mcp / checks: formatting, treefmt, wisp-mcp
    • devShells: default, ci / formatter あり
  • 実ビルド(treefmt / wisp-mcp チェック、nix develop 両シェル)も darwin 上で成功。Linux 専用チェック(clippy/tests/wisp-windows/sherpa 取得)は当ホストでは評価のみ。

注: flake.nix が宣言する x86_64-darwin は、pin している nixpkgs-unstable が同プラットフォームを落としているため --all-systems 評価で失敗しますが、これは本 PR 以前からの既存事象で範囲外です。

flake-partsのエコシステム(treefmt-nix, git-hooks.nix)を活用してNix flakeを
簡素化し、ビルドキャッシュと開発環境セットアップを容易にする。

- flake.nixに明示的なroot perSystemを置き、pkgs/rustToolchain/swiftformatを
  一度だけ構築して各ヘルパー(nix/packages.nix, nix/formatting.nix,
  nix/dev-shells.nix)へ名前付き引数で明示的に渡す構成にした。_module.argsの
  暗黙的な共有をやめ、データの流れを追いやすくした。
- treefmt-nixでnixfmt/rustfmt/swiftformatを一元化し、formatterと
  treefmtチェックとして公開(従来のnixfmt formatterとcrane cargoFmtを置換)。
  元のformattingチェック名も維持。
- git-hooks.nixのpre-commit(treefmt + clippy)をdev shell入室時に自動導入。
  clippyフックはCraneのclippyチェックとスコープを一致(--workspace
  --exclude wisp-desktop --all-targets)。
- nixConfigでnix-communityバイナリキャッシュを宣言し、default shellに
  cachix CLIを同梱。CraneのbuildDepsOnly成果物を共有してキャッシュ再利用を最大化。
- CIのパスフィルタにnix/**を追加(nix/rust/rust-macos/swift.yaml)。

Windowsクロスコンパイル、sherpa-onnxのLinux取得、macOS Xcodeハンドリング、
swiftformatピン留め、全packages/checks/devShells出力は維持している。
@pranc1ngpegasus
pranc1ngpegasus merged commit 9ca0b5b into main Aug 4, 2026
5 checks passed
@pranc1ngpegasus
pranc1ngpegasus deleted the refactor/nix-flake-parts branch August 4, 2026 02:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant