-
Notifications
You must be signed in to change notification settings - Fork 4
/
flake.nix
130 lines (114 loc) · 4.21 KB
/
flake.nix
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
{
inputs = {
nixpkgs.url = "https://flakehub.com/f/NixOS/nixpkgs/0.2411.*";
fenix = {
url = "https://flakehub.com/f/nix-community/fenix/0.1.*";
inputs.nixpkgs.follows = "nixpkgs";
};
naersk.url = "https://flakehub.com/f/nix-community/naersk/0.1.*";
};
outputs = { self, ... }@inputs:
let
lastModifiedDate = self.lastModifiedDate or self.lastModified or "19700101";
version = "${builtins.substring 0 8 lastModifiedDate}-${self.shortRev or "dirty"}";
supportedSystems = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
forSystems = s: f: inputs.nixpkgs.lib.genAttrs s (system: f rec {
inherit system;
pkgs = import inputs.nixpkgs {
inherit system;
overlays = [ self.overlays.default ];
};
});
forAllSystems = forSystems supportedSystems;
in
{
overlays.default = final: prev:
let
inherit (final.stdenv.hostPlatform) system;
rustToolchain = with inputs.fenix.packages.${system};
combine ([
stable.clippy
stable.rustc
stable.cargo
stable.rustfmt
stable.rust-src
] ++ inputs.nixpkgs.lib.optionals (system == "x86_64-linux") [
targets.x86_64-unknown-linux-musl.stable.rust-std
] ++ inputs.nixpkgs.lib.optionals (system == "aarch64-linux") [
targets.aarch64-unknown-linux-musl.stable.rust-std
]);
in
{
inherit rustToolchain;
naerskLib = final.callPackage inputs.naersk {
cargo = rustToolchain;
rustc = rustToolchain;
};
};
packages = forAllSystems ({ pkgs, system }: rec {
default = flake-checker;
flake-checker = pkgs.naerskLib.buildPackage
({
name = "flake-checker-${version}";
src = self;
doCheck = true;
buildInputs = with pkgs; [ ] ++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [ Security SystemConfiguration ]);
nativeBuildInputs = with pkgs; [ ] ++ lib.optionals stdenv.isDarwin [ libiconv ];
} // pkgs.lib.optionalAttrs pkgs.stdenv.isLinux {
CARGO_BUILD_TARGET =
if system == "x86_64-linux" then
"x86_64-unknown-linux-musl"
else if system == "aarch64-linux" then
"aarch64-unknown-linux-musl"
else
throw "Unsupported Linux system: ${system}";
CARGO_BUILD_RUSTFLAGS = "-C target-feature=+crt-static";
});
});
devShells = forAllSystems ({ pkgs, ... }: {
default =
let
check-nixpkgs-fmt = pkgs.writeShellApplication {
name = "check-nixpkgs-fmt";
runtimeInputs = with pkgs; [ git nixpkgs-fmt ];
text = ''
nixpkgs-fmt --check "$(git ls-files '*.nix')"
'';
};
check-rustfmt = pkgs.writeShellApplication {
name = "check-rustfmt";
runtimeInputs = with pkgs; [ rustToolchain ];
text = "cargo fmt --check";
};
get-allowed-refs = pkgs.writeShellApplication {
name = "get-allowed-refs";
runtimeInputs = with pkgs; [ rustToolchain ];
text = "cargo run --features allowed-refs -- --get-allowed-refs";
};
in
pkgs.mkShell {
packages = (with pkgs; [
bashInteractive
# Rust
rustToolchain
cargo-bloat
cargo-edit
cargo-machete
cargo-watch
rust-analyzer
# Nix
nixpkgs-fmt
# CI checks
check-nixpkgs-fmt
check-rustfmt
# Scripts
get-allowed-refs
]) ++ pkgs.lib.optionals pkgs.stdenv.isDarwin (with pkgs.darwin.apple_sdk.frameworks; [ Security SystemConfiguration ]);
env = {
# Required by rust-analyzer
RUST_SRC_PATH = "${pkgs.rustToolchain}/lib/rustlib/src/rust/library";
};
};
});
};
}