-
-
Notifications
You must be signed in to change notification settings - Fork 5
/
flake.nix
74 lines (66 loc) · 2.29 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
{
description = "A tool to prefetch VS Code extensions for Nix expressions";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
systems = {
url = "github:nix-systems/default";
flake = false;
};
rust-overlay.url = "github:oxalica/rust-overlay";
};
outputs = { self, nixpkgs, systems, rust-overlay }:
let
inherit (nixpkgs) lib;
eachSystem = lib.genAttrs (import systems);
pkgsFor = eachSystem (system:
import nixpkgs {
inherit system;
overlays = [ rust-overlay.overlays.default self.overlays.default ];
});
packageName = (lib.importTOML ./Cargo.toml).package.name;
rustToolchain = lib.importTOML ./rust-toolchain.toml;
rustVersion = rustToolchain.toolchain.channel;
in {
devShells = lib.mapAttrs (system: pkgs:
let
rust-stable = pkgs.rust-bin.stable.${rustVersion}.minimal.override {
extensions = [ "rust-src" "rust-docs" "clippy" ];
};
in {
default = pkgs.mkShell {
strictDeps = true;
packages = [
(lib.hiPrio rust-stable)
# Use rustfmt, and other tools that require nightly features.
(pkgs.rust-bin.selectLatestNightlyWith (toolchain:
toolchain.minimal.override {
extensions = [ "rustfmt" "rust-analyzer" ];
}))
];
};
}) pkgsFor;
overlays = {
default = lib.composeManyExtensions [ self.overlays.${packageName} ];
${packageName} = final: _:
let
rust-bin = rust-overlay.lib.mkRustBin { } final;
rust-stable = rust-bin.stable.${rustVersion}.minimal;
rustPlatform = final.makeRustPlatform {
cargo = rust-stable;
rustc = rust-stable;
};
in {
${packageName} = final.callPackage ./nix/package.nix {
sourceRoot = self;
inherit rustPlatform;
};
};
};
packages = lib.mapAttrs (system: pkgs: {
default = self.packages.${system}.${packageName};
${packageName} = pkgs.${packageName};
}) pkgsFor;
formatter =
eachSystem (system: nixpkgs.legacyPackages.${system}.nixfmt-classic);
};
}