+22
-66
flake.lock
+22
-66
flake.lock
···
1
1
{
2
2
"nodes": {
3
-
"flake-utils": {
4
-
"inputs": {
5
-
"systems": "systems"
6
-
},
7
-
"locked": {
8
-
"lastModified": 1731533236,
9
-
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
10
-
"owner": "numtide",
11
-
"repo": "flake-utils",
12
-
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
13
-
"type": "github"
14
-
},
15
-
"original": {
16
-
"owner": "numtide",
17
-
"repo": "flake-utils",
18
-
"type": "github"
19
-
}
20
-
},
21
3
"naersk": {
22
4
"inputs": {
23
-
"nixpkgs": "nixpkgs"
5
+
"nixpkgs": [
6
+
"nixpkgs"
7
+
]
24
8
},
25
9
"locked": {
26
10
"lastModified": 1752249768,
···
38
22
},
39
23
"nixpkgs": {
40
24
"locked": {
41
-
"lastModified": 1752077645,
42
-
"narHash": "sha256-HM791ZQtXV93xtCY+ZxG1REzhQenSQO020cu6rHtAPk=",
43
-
"owner": "NixOS",
44
-
"repo": "nixpkgs",
45
-
"rev": "be9e214982e20b8310878ac2baa063a961c1bdf6",
46
-
"type": "github"
47
-
},
48
-
"original": {
49
-
"owner": "NixOS",
50
-
"ref": "nixpkgs-unstable",
51
-
"repo": "nixpkgs",
52
-
"type": "github"
53
-
}
54
-
},
55
-
"nixpkgs-mozilla": {
56
-
"flake": false,
57
-
"locked": {
58
-
"lastModified": 1744624473,
59
-
"narHash": "sha256-S6zT/w5SyAkJ//dYdjbrXgm+6Vkd/k7qqUl4WgZ6jjk=",
60
-
"owner": "mozilla",
61
-
"repo": "nixpkgs-mozilla",
62
-
"rev": "2292d4b35aa854e312ad2e95c4bb5c293656f21a",
63
-
"type": "github"
64
-
},
65
-
"original": {
66
-
"owner": "mozilla",
67
-
"repo": "nixpkgs-mozilla",
68
-
"type": "github"
69
-
}
70
-
},
71
-
"nixpkgs_2": {
72
-
"locked": {
73
-
"lastModified": 1752077645,
74
-
"narHash": "sha256-HM791ZQtXV93xtCY+ZxG1REzhQenSQO020cu6rHtAPk=",
25
+
"lastModified": 1756787288,
26
+
"narHash": "sha256-rw/PHa1cqiePdBxhF66V7R+WAP8WekQ0mCDG4CFqT8Y=",
75
27
"owner": "NixOS",
76
28
"repo": "nixpkgs",
77
-
"rev": "be9e214982e20b8310878ac2baa063a961c1bdf6",
29
+
"rev": "d0fc30899600b9b3466ddb260fd83deb486c32f1",
78
30
"type": "github"
79
31
},
80
32
"original": {
81
33
"owner": "NixOS",
82
-
"ref": "nixpkgs-unstable",
34
+
"ref": "nixos-unstable",
83
35
"repo": "nixpkgs",
84
36
"type": "github"
85
37
}
86
38
},
87
39
"root": {
88
40
"inputs": {
89
-
"flake-utils": "flake-utils",
90
41
"naersk": "naersk",
91
-
"nixpkgs": "nixpkgs_2",
92
-
"nixpkgs-mozilla": "nixpkgs-mozilla"
42
+
"nixpkgs": "nixpkgs",
43
+
"rust-overlay": "rust-overlay"
93
44
}
94
45
},
95
-
"systems": {
46
+
"rust-overlay": {
47
+
"inputs": {
48
+
"nixpkgs": [
49
+
"nixpkgs"
50
+
]
51
+
},
96
52
"locked": {
97
-
"lastModified": 1681028828,
98
-
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
99
-
"owner": "nix-systems",
100
-
"repo": "default",
101
-
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
53
+
"lastModified": 1757039615,
54
+
"narHash": "sha256-qm53+EUFfzyF8F0MEscHGqf9tx462GV3/zUZrn9wiQU=",
55
+
"owner": "oxalica",
56
+
"repo": "rust-overlay",
57
+
"rev": "4486e04adbb4b0e39f593767f2c36e2211003d01",
102
58
"type": "github"
103
59
},
104
60
"original": {
105
-
"owner": "nix-systems",
106
-
"repo": "default",
61
+
"owner": "oxalica",
62
+
"repo": "rust-overlay",
107
63
"type": "github"
108
64
}
109
65
}
+127
-27
flake.nix
+127
-27
flake.nix
···
1
1
{
2
+
description = "Stack allocated structured concurrency";
3
+
2
4
inputs = {
3
-
flake-utils.url = "github:numtide/flake-utils";
4
-
naersk.url = "github:nix-community/naersk";
5
-
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
6
-
nixpkgs-mozilla = {
7
-
url = "github:mozilla/nixpkgs-mozilla";
8
-
flake = false;
5
+
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
6
+
7
+
rust-overlay = {
8
+
url = "github:oxalica/rust-overlay";
9
+
inputs.nixpkgs.follows = "nixpkgs";
10
+
};
11
+
12
+
naersk = {
13
+
url = "github:nix-community/naersk";
14
+
inputs.nixpkgs.follows = "nixpkgs";
9
15
};
10
16
};
11
17
12
-
outputs = { self, flake-utils, naersk, nixpkgs, nixpkgs-mozilla }:
13
-
flake-utils.lib.eachDefaultSystem (system:
14
-
let
15
-
pkgs = (import nixpkgs) {
16
-
inherit system;
17
-
overlays = [
18
-
(import nixpkgs-mozilla)
19
-
];
20
-
};
18
+
outputs = { nixpkgs, rust-overlay, naersk, ... }:
19
+
let
20
+
forAllSystems = function:
21
+
nixpkgs.lib.genAttrs [
22
+
"x86_64-linux"
23
+
"aarch64-linux"
24
+
"riscv64-linux"
25
+
"aarch64-darwin"
26
+
] (system: function nixpkgs.legacyPackages.${system});
27
+
28
+
forEachSystem = forAllSystems (pkgs:
29
+
let
30
+
pkgs' = pkgs.extend rust-overlay.overlays.default;
31
+
32
+
rust-stable = pkgs'.rust-bin.stable.latest.default.override {
33
+
extensions = [ "rust-src" "clippy" "rustfmt" ];
34
+
};
35
+
36
+
rust-nightly = pkgs'.rust-bin.nightly.latest.default.override {
37
+
extensions = [ "rust-src" "clippy" "rustfmt" "miri" ];
38
+
};
21
39
22
-
naersk' = pkgs.callPackage naersk {};
40
+
naersk-stable = pkgs'.callPackage naersk {
41
+
cargo = rust-stable;
42
+
rustc = rust-stable;
43
+
};
23
44
24
-
in {
25
-
# For `nix build` & `nix run`:
26
-
defaultPackage = naersk'.buildPackage {
27
-
src = ./.;
28
-
};
45
+
naersk-nightly = pkgs'.callPackage naersk {
46
+
cargo = rust-nightly;
47
+
rustc = rust-nightly;
48
+
};
29
49
30
-
# For `nix develop`:
31
-
devShell = pkgs.mkShell {
32
-
nativeBuildInputs = with pkgs; [ rustc cargo clippy rustfmt rust-analyzer cargo-expand ];
33
-
};
34
-
}
35
-
);
50
+
buildInputs = [];
51
+
nativeBuildInputs = [];
52
+
53
+
# Production package built with stable Rust
54
+
package = naersk-stable.buildPackage {
55
+
src = ./.;
56
+
inherit buildInputs nativeBuildInputs;
57
+
};
58
+
59
+
# Development package built with nightly (for Miri compatibility)
60
+
packageNightly = naersk-nightly.buildPackage {
61
+
src = ./.;
62
+
inherit buildInputs nativeBuildInputs;
63
+
};
64
+
65
+
in
66
+
{
67
+
packages = {
68
+
default = package;
69
+
stable = package;
70
+
nightly = packageNightly;
71
+
};
72
+
73
+
devShells = {
74
+
default = pkgs'.mkShell {
75
+
buildInputs = buildInputs ++ [
76
+
rust-stable
77
+
pkgs'.rust-analyzer
78
+
];
79
+
nativeBuildInputs = nativeBuildInputs;
80
+
81
+
# RUST_SRC_PATH = "${rust-stable}/lib/rustlib/src/rust/library";
82
+
};
83
+
84
+
nightly = pkgs'.mkShell {
85
+
buildInputs = buildInputs ++ [
86
+
rust-nightly
87
+
# pkgs'.rust-analyzer
88
+
];
89
+
nativeBuildInputs = nativeBuildInputs;
90
+
91
+
# RUST_SRC_PATH = "${rust-nightly}/lib/rustlib/src/rust/library";
92
+
MIRIFLAGS = "-Zmiri-strict-provenance";
93
+
94
+
shellHook = ''
95
+
echo "Nightly Rust environment with Miri"
96
+
'';
97
+
};
98
+
};
99
+
100
+
checks = {
101
+
test = pkgs'.runCommand "cargo-test" {
102
+
buildInputs = [ rust-stable ] ++ buildInputs;
103
+
nativeBuildInputs = nativeBuildInputs;
104
+
} ''
105
+
cargo test --release
106
+
'';
107
+
108
+
miri = pkgs'.runCommand "cargo-miri-test" {
109
+
buildInputs = [ rust-nightly ] ++ buildInputs;
110
+
nativeBuildInputs = nativeBuildInputs;
111
+
} ''
112
+
cargo miri test --release
113
+
'';
114
+
115
+
clippy = pkgs'.runCommand "cargo-clippy" {
116
+
buildInputs = [ rust-stable ] ++ buildInputs;
117
+
nativeBuildInputs = nativeBuildInputs;
118
+
} ''
119
+
cargo clippy --deny
120
+
'';
121
+
122
+
fmt = pkgs'.runCommand "cargo-fmt" {
123
+
buildInputs = [ rust-stable ];
124
+
} ''
125
+
cargo fmt --all --check
126
+
'';
127
+
};
128
+
}
129
+
);
130
+
in
131
+
{
132
+
packages = forAllSystems (pkgs: forEachSystem.${pkgs.system}.packages);
133
+
devShells = forAllSystems (pkgs: forEachSystem.${pkgs.system}.devShells);
134
+
checks = forAllSystems (pkgs: forEachSystem.${pkgs.system}.checks);
135
+
};
36
136
}