-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathflake.nix
More file actions
153 lines (150 loc) · 4.69 KB
/
Copy pathflake.nix
File metadata and controls
153 lines (150 loc) · 4.69 KB
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
{
description = "Command-line interface for Radroots";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
rust-overlay = {
url = "github:oxalica/rust-overlay";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs =
{ nixpkgs, rust-overlay, ... }:
let
systems = [
"aarch64-darwin"
"aarch64-linux"
"x86_64-darwin"
"x86_64-linux"
];
forAllSystems =
f:
nixpkgs.lib.genAttrs systems (
system:
let
pkgs = import nixpkgs {
inherit system;
overlays = [ rust-overlay.overlays.default ];
};
rustToolchain = pkgs.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml;
basePackages =
[
pkgs.git
pkgs.rustup
rustToolchain
pkgs.clang
pkgs.llvmPackages.libclang
pkgs.pkg-config
]
++ pkgs.lib.optionals pkgs.stdenv.isDarwin [
pkgs.darwin.libiconv
];
libraryPath = pkgs.lib.makeLibraryPath basePackages;
includePath = pkgs.lib.makeSearchPathOutput "dev" "include" basePackages;
darwinLdFlags = pkgs.lib.optionalString pkgs.stdenv.isDarwin "-L${pkgs.darwin.libiconv}/lib";
darwinRustFlags = pkgs.lib.optionalString pkgs.stdenv.isDarwin "-L native=${pkgs.darwin.libiconv}/lib";
mkApp =
name:
{
runtimeInputs ? basePackages,
text,
}:
let
script = pkgs.writeShellApplication {
inherit name;
inherit runtimeInputs;
text = ''
set -euo pipefail
repo_root="$(git rev-parse --show-toplevel)"
cd "$repo_root"
./tools/verify-repository-boundary.sh
export LIBCLANG_PATH="${pkgs.llvmPackages.libclang.lib}/lib"
export LIBRARY_PATH="${libraryPath}:''${LIBRARY_PATH:-}"
export DYLD_FALLBACK_LIBRARY_PATH="${libraryPath}:''${DYLD_FALLBACK_LIBRARY_PATH:-}"
export LDFLAGS="${darwinLdFlags} ''${LDFLAGS:-}"
export NIX_LDFLAGS="${darwinLdFlags} ''${NIX_LDFLAGS:-}"
export RUSTFLAGS="${darwinRustFlags} ''${RUSTFLAGS:-}"
export CPATH="${includePath}:''${CPATH:-}"
${text}
'';
};
in
{
type = "app";
program = "${script}/bin/${name}";
};
in
f {
inherit
basePackages
darwinLdFlags
darwinRustFlags
includePath
libraryPath
mkApp
pkgs
rustToolchain
;
}
);
in
{
apps = forAllSystems (
{
mkApp,
...
}:
rec {
default = check;
check = mkApp "check" {
text = ''
cargo metadata --format-version 1 --no-deps
cargo check
'';
};
fmt = mkApp "fmt" {
text = ''
cargo fmt --package radroots_cli --check
'';
};
release-acceptance = mkApp "release-acceptance" {
text = ''
cargo fmt --package radroots_cli --check
cargo metadata --format-version 1 --no-deps
cargo check
cargo test -j1 -- --test-threads=1
'';
};
test = mkApp "test" {
text = ''
cargo test -j1 -- --test-threads=1
'';
};
}
);
devShells = forAllSystems (
{
basePackages,
darwinLdFlags,
darwinRustFlags,
includePath,
libraryPath,
pkgs,
...
}:
{
default = pkgs.mkShell {
packages = basePackages;
shellHook = ''
export LIBCLANG_PATH="${pkgs.llvmPackages.libclang.lib}/lib"
export LIBRARY_PATH="${libraryPath}:''${LIBRARY_PATH:-}"
export DYLD_FALLBACK_LIBRARY_PATH="${libraryPath}:''${DYLD_FALLBACK_LIBRARY_PATH:-}"
export LDFLAGS="${darwinLdFlags} ''${LDFLAGS:-}"
export NIX_LDFLAGS="${darwinLdFlags} ''${NIX_LDFLAGS:-}"
export RUSTFLAGS="${darwinRustFlags} ''${RUSTFLAGS:-}"
export CPATH="${includePath}:''${CPATH:-}"
'';
};
}
);
};
}