nix: Use flake-parts, partitions, and treefmt-nix (#45321)

Release Notes:

Refactored:
- Use [flake-parts](https://flake.parts/index.html) modules
- `nix/shell.nix` -> `nix/modules/devshells.nix`

Added:
- Use
[flake-parts.partitions](https://flake.parts/options/flake-parts-partitions.html)
to isolate dev dependencies so that flakes that use `zed-editor` don't
fetch dev-only inputs such as `treefmt-nix`
- [treefmt-nix](https://github.com/numtide/treefmt-nix)
  - nixfmt
  - rustfmt

Fixed:
- `shell.nix` and `default.nix` fetching `flake-compat` from
`flake.lock` which added an extra and unnecessary input/dependency to
`flake.nix`. Fixed by setting a fixed rev and sha256 instead.
- `nixfmt-rfc-style` is deprecated and is now `nixfmt`
- Fixes #45338 by using rust-overlay toolchain directly
  - Previously, the devShell included `rustup` which caused slow startup
times as Nix would build rustup from source (including running its test
suite). Additionally, rust tooling (cargo, rustfmt, clippy,
rust-analyzer) wasn't available in the dev shell.
- cargo, rustc, and rust-toolchain.toml components included in
`rustToolchain`

Chore:
- Update `flake.lock`
- Format Rust code with `rustfmt` via `treefmt-nix`

---------

Co-authored-by: Jakub Konka <kubkon@jakubkonka.com>
This commit is contained in:
Diego PerezandJakub Konka authored and GitHub committed 2026-02-02 14:26:42 +00:00
1 parent 90180f8633
commit 57ead85727
19 files changed
+257 -138

No files matched your search

+10 -35
View File
@@ -2,23 +2,18 @@
description = "High-performance, multiplayer code editor from the creators of Atom and Tree-sitter";
inputs = {
nixpkgs.url = "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz";
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-parts.url = "github:hercules-ci/flake-parts";
crane.url = "github:ipetkov/crane";
rust-overlay = {
url = "github:oxalica/rust-overlay";
inputs.nixpkgs.follows = "nixpkgs";
};
crane.url = "github:ipetkov/crane";
flake-compat.url = "github:edolstra/flake-compat";
};
outputs =
{
nixpkgs,
rust-overlay,
crane,
...
}:
let
inputs@{ flake-parts, ... }:
flake-parts.lib.mkFlake { inherit inputs; } {
systems = [
"x86_64-linux"
"x86_64-darwin"
@@ -26,31 +21,11 @@
"aarch64-darwin"
];
forAllSystems = f: nixpkgs.lib.genAttrs systems (system: f nixpkgs.legacyPackages.${system});
mkZed =
pkgs:
let
rustBin = rust-overlay.lib.mkRustBin { } pkgs;
in
pkgs.callPackage ./nix/build.nix {
crane = crane.mkLib pkgs;
rustToolchain = rustBin.fromRustupToolchainFile ./rust-toolchain.toml;
};
in
{
packages = forAllSystems (pkgs: rec {
default = mkZed pkgs;
debug = default.override { profile = "dev"; };
});
devShells = forAllSystems (pkgs: {
default = pkgs.callPackage ./nix/shell.nix {
zed-editor = mkZed pkgs;
};
});
formatter = forAllSystems (pkgs: pkgs.nixfmt-rfc-style);
overlays.default = final: _: {
zed-editor = mkZed final;
};
imports = [
./nix/modules/overlays.nix
./nix/modules/packages.nix
./nix/modules/partitions.nix
];
};
nixConfig = {