Skip to content

Commit 4d3cbc9

Browse files
authored
Merge pull request #5 from marijanp/standard-and-flake-nix
2 parents 297e5a3 + 8bdc45b commit 4d3cbc9

File tree

9 files changed

+310
-323
lines changed

9 files changed

+310
-323
lines changed

Cargo.lock

Lines changed: 116 additions & 128 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

flake.lock

Lines changed: 15 additions & 88 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

flake.nix

Lines changed: 59 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -13,135 +13,87 @@
1313
};
1414

1515
inputs = {
16-
flake-parts.url = "github:hercules-ci/flake-parts";
1716
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
1817
treefmt-nix.url = "github:numtide/treefmt-nix";
19-
treefmt-nix.inputs.nixpkgs.follows = "nixpkgs";
18+
treefmt-nix.flake = false;
2019
fenix.url = "github:nix-community/fenix";
21-
fenix.inputs.nixpkgs.follows = "nixpkgs";
20+
fenix.flake = false;
2221
crane.url = "github:ipetkov/crane";
23-
advisory-db.url = "github:rustsec/advisory-db";
24-
advisory-db.flake = false;
22+
crane.flake = false;
2523
};
2624

2725
outputs =
28-
inputs@{
26+
{
2927
self,
30-
flake-parts,
28+
nixpkgs,
3129
treefmt-nix,
30+
fenix,
31+
crane,
3232
...
3333
}:
34-
flake-parts.lib.mkFlake { inherit inputs; } {
35-
systems = [
34+
let
35+
# there is also nixpkgs.lib.systems.flakeExposed
36+
allSystems = [
3637
"x86_64-linux"
3738
"aarch64-linux"
3839
"x86_64-darwin"
3940
"aarch64-darwin"
4041
];
41-
imports = [
42-
treefmt-nix.flakeModule
43-
./nixos
44-
];
45-
perSystem =
46-
{
47-
self',
48-
inputs',
49-
pkgs,
50-
lib,
51-
...
52-
}:
53-
let
54-
rustToolchain = inputs'.fenix.packages.stable.toolchain;
55-
craneLib = (inputs.crane.mkLib pkgs).overrideToolchain rustToolchain;
56-
57-
commonAttrs = {
58-
pname = "server";
59-
60-
src = lib.fileset.toSource {
61-
root = ./.;
62-
fileset = lib.fileset.unions [
63-
./Cargo.toml
64-
./Cargo.lock
65-
./server
42+
withPkgs =
43+
pkgsCallback:
44+
nixpkgs.lib.genAttrs allSystems (
45+
system:
46+
let
47+
pkgs = import nixpkgs {
48+
inherit system;
49+
overlays = [
50+
(import "${fenix}/overlay.nix")
51+
(final: prev: {
52+
craneLib = (import crane { pkgs = final; }).overrideToolchain final.fenix.stable.toolchain;
53+
mkWrapper = (import treefmt-nix).mkWrapper final;
54+
})
55+
(import ./nix/overlays/default.nix)
56+
(import ./nix/overlays/dev.nix)
6657
];
6758
};
59+
in
60+
pkgsCallback { inherit pkgs system; }
61+
);
62+
in
63+
{
6864

69-
nativeBuildInputs = [ pkgs.pkg-config ];
70-
buildInputs =
71-
with pkgs;
72-
[
73-
openssl.dev
74-
]
75-
++ lib.optionals stdenv.isDarwin [
76-
libiconv
77-
];
78-
79-
# the coverage report will run the tests
80-
doCheck = false;
81-
};
82-
in
65+
devShells = withPkgs (
66+
{ pkgs, ... }:
8367
{
84-
devShells.default = pkgs.mkShell {
85-
inputsFrom = [ self'.packages.default ];
86-
};
87-
88-
packages = {
89-
server-deps = craneLib.buildDepsOnly commonAttrs;
68+
default = pkgs.devShell;
69+
}
70+
);
9071

91-
server-docs = craneLib.cargoDoc (
92-
commonAttrs
93-
// {
94-
cargoArtifacts = self'.packages.server-deps;
95-
}
96-
);
97-
98-
server = craneLib.buildPackage (
99-
commonAttrs
100-
// {
101-
cargoArtifacts = self'.packages.server-deps;
102-
meta.mainProgram = "server";
103-
}
104-
);
105-
106-
default = self'.packages.server;
107-
};
108-
109-
checks = {
110-
inherit (self'.packages) server-docs server;
111-
112-
lint = craneLib.cargoClippy (
113-
commonAttrs
114-
// {
115-
cargoArtifacts = self'.packages.server-deps;
116-
cargoClippyExtraArgs = "--all-targets -- --deny warnings";
117-
}
118-
);
119-
120-
coverage-report = craneLib.cargoTarpaulin (
121-
commonAttrs
122-
// {
123-
cargoArtifacts = self'.packages.server-deps;
124-
}
125-
);
126-
};
72+
packages = withPkgs (
73+
{ pkgs, system }:
74+
{
75+
inherit (pkgs)
76+
server
77+
server-docs
78+
lint
79+
coverage-report
80+
server-docker-image
81+
;
82+
server-deps = pkgs.cargoArtifacts;
83+
default = self.packages.${system}.server;
84+
}
85+
);
12786

128-
treefmt = {
129-
projectRootFile = ".git/config";
130-
programs.nixfmt.enable = true;
131-
programs.rustfmt.enable = true;
132-
programs.rustfmt.package = craneLib.rustfmt;
133-
settings.formatter = { };
134-
};
135-
};
136-
flake =
137-
let
138-
system = "x86_64-linux";
139-
pkgs = inputs.nixpkgs.legacyPackages.${system};
140-
in
87+
checks = withPkgs (
88+
{ pkgs, ... }:
14189
{
142-
packages.${system}.server-docker-image = pkgs.callPackage ./docker-image.nix {
143-
inherit (self.packages.${system}) server;
144-
};
145-
};
90+
inherit (pkgs)
91+
server
92+
server-docs
93+
lint
94+
coverage-report
95+
;
96+
}
97+
);
14698
};
14799
}
File renamed without changes.

nix/overlays/default.nix

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
final: prev: {
2+
cargoArtifacts = final.callPackage ../package.nix {
3+
craneLibBuild = final.craneLib.buildDepsOnly;
4+
cargoArtifacts = null;
5+
};
6+
7+
server = final.callPackage ../package.nix {
8+
craneLibBuild = final.craneLib.buildPackage;
9+
};
10+
11+
server-docs = final.callPackage ../package.nix {
12+
craneLibBuild = final.craneLib.cargoDoc;
13+
};
14+
15+
lint =
16+
(final.callPackage ../package.nix {
17+
craneLibBuild = final.craneLib.cargoClippy;
18+
}).overrideAttrs
19+
(_oldAttrs: {
20+
cargoClippyExtraArgs = "--all-targets -- --deny warnings";
21+
});
22+
23+
coverage-report = final.callPackage ../package.nix {
24+
craneLibBuild = final.craneLib.cargoTarpaulin;
25+
};
26+
27+
server-docker-image = final.callPackage ../docker-image.nix { };
28+
}

nix/overlays/dev.nix

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
final: prev: {
2+
devShell = final.mkShell {
3+
inputsFrom = [ final.server ];
4+
nativeBuildInputs = [
5+
(final.mkWrapper {
6+
projectRootFile = ".git/config";
7+
programs.nixfmt.enable = true;
8+
programs.rustfmt.enable = true;
9+
programs.rustfmt.package = final.craneLib.rustfmt;
10+
settings.formatter = { };
11+
})
12+
];
13+
};
14+
}

0 commit comments

Comments
 (0)