forked from rustshop/flakebox
-
Notifications
You must be signed in to change notification settings - Fork 0
/
flake.nix
129 lines (114 loc) · 3.51 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
{
description = "Toolkit for building Nix Flake development environments for Rust projects";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05";
systems.url = "github:nix-systems/default";
flake-utils.url = "github:numtide/flake-utils";
flake-utils.inputs.systems.follows = "systems";
crane = {
url = "github:ipetkov/crane/?rev=b65673fce97d277934488a451724be94cc62499a"; # https://github.com/ipetkov/crane/releases/tag/v0.17.3
inputs.nixpkgs.follows = "nixpkgs";
};
fenix = {
url = "github:nix-community/fenix";
inputs.nixpkgs.follows = "nixpkgs";
};
android-nixpkgs = {
url = "github:tadfisher/android-nixpkgs?rev=7fa1348249564e43185d3053f579f9fa923d46cc"; # stable channel https://github.com/tadfisher/android-nixpkgs/tree/stable
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { flake-utils, nixpkgs, crane, fenix, android-nixpkgs, ... }:
let
mkLib = pkgs: import ./lib
{
inherit pkgs crane fenix android-nixpkgs;
};
in
{
templates = {
default = {
path = ./templates/default;
description = "Flakebox default project template";
};
};
} //
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = nixpkgs.legacyPackages.${system};
flakeboxLib = mkLib pkgs {
config = {
github.ci.cachixRepo = "rustshop";
just.importPaths = [
"justfile.custom"
];
motd = {
enable = true;
command = ''
>&2 echo "Welcome to Flakebox dev env"
'';
};
};
};
src = flakeboxLib.filterSubPaths {
root = builtins.path {
name = "flakebox";
path = ./.;
};
paths = [
"Cargo.toml"
"Cargo.lock"
".cargo"
"flakebox-bin"
];
};
outputs =
(flakeboxLib.craneMultiBuild { }) (craneLib':
let
craneLib = (craneLib'.overrideArgs {
pname = "flexbox";
nativeBuildInputs = [
pkgs.mold
];
inherit src;
});
in
rec {
workspaceDeps = craneLib.buildWorkspaceDepsOnly { };
workspaceBuild = craneLib.buildWorkspace {
cargoArtifacts = workspaceDeps;
};
flakebox = craneLib.buildPackage { };
flakeboxGroup = craneLib.buildPackageGroup {
packages = [ "flakebox" ];
mainProgram = "flakebox";
};
});
checks =
pkgs.callPackages ./checks {
inherit pkgs;
mkLib = mkLib;
};
in
{
inherit checks;
lib = mkLib pkgs;
packages = {
bootstrap = pkgs.writeShellScriptBin "flakebox-bootstrap" "exec ${pkgs.bash}/bin/bash ${./bin/bootstrap.sh} ${./bin/bootstrap.flake.nix} \"$@\"";
root = flakeboxLib.root;
default = flakeboxLib.flakeboxBin;
docs = flakeboxLib.docs;
};
legacyPackages = outputs // {
fullChecks =
(pkgs.callPackages ./checks {
inherit pkgs;
mkLib = mkLib;
full = true;
}).workspaceCross;
};
devShells = flakeboxLib.mkShells {
packages = [ pkgs.mdbook ];
};
});
}