mirror of
https://codeberg.org/icewind/mill-scale.git
synced 2026-06-03 09:54:19 +02:00
init
This commit is contained in:
commit
f1fa085ef3
4 changed files with 276 additions and 0 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
result
|
||||
.direnv
|
||||
83
flake.lock
generated
Normal file
83
flake.lock
generated
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
{
|
||||
"nodes": {
|
||||
"crane": {
|
||||
"locked": {
|
||||
"lastModified": 1727060013,
|
||||
"narHash": "sha256-/fC5YlJy4IoAW9GhkJiwyzk0K/gQd9Qi4rRcoweyG9E=",
|
||||
"owner": "ipetkov",
|
||||
"repo": "crane",
|
||||
"rev": "6b40cc876c929bfe1e3a24bf538ce3b5622646ba",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "ipetkov",
|
||||
"repo": "crane",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flakelight": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1727095190,
|
||||
"narHash": "sha256-eZfUxkPefTP5fknpr2/X+snNysEj830Ft1IaW7VafFE=",
|
||||
"owner": "nix-community",
|
||||
"repo": "flakelight",
|
||||
"rev": "9e0f7e360688187ed3d7d8b033028e0d3473aa2c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "flakelight",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1726937504,
|
||||
"narHash": "sha256-bvGoiQBvponpZh8ClUcmJ6QnsNKw0EMrCQJARK3bI1c=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "9357f4f23713673f310988025d9dc261c20e70c6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"crane": "crane",
|
||||
"flakelight": "flakelight",
|
||||
"rust-overlay": "rust-overlay"
|
||||
}
|
||||
},
|
||||
"rust-overlay": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"flakelight",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1727058553,
|
||||
"narHash": "sha256-tY/UU3Qk5gP/J0uUM4DZ6wo4arNLGAVqLKBotILykfQ=",
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"rev": "edc5b0f896170f07bd39ad59d6186fcc7859bbb2",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
||||
23
flake.nix
Normal file
23
flake.nix
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
# mill-scale -- Another rust module for flakelight
|
||||
# Copyright (C) 2024 Robin Appelman <robin@icewind.nl>
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
{
|
||||
description = "Another rust module for flakelite";
|
||||
inputs = {
|
||||
flakelight.url = "github:nix-community/flakelight";
|
||||
crane.url = "github:ipetkov/crane";
|
||||
rust-overlay = {
|
||||
url = "github:oxalica/rust-overlay";
|
||||
inputs.nixpkgs.follows = "flakelight/nixpkgs";
|
||||
};
|
||||
};
|
||||
outputs = { flakelight, crane, rust-overlay, ... }: flakelight ./. {
|
||||
imports = [ flakelight.flakelightModules.flakelightModule ];
|
||||
flakelightModule = { lib, ... }: {
|
||||
imports = [ ./mill-scale.nix ];
|
||||
inputs.crane = lib.mkDefault crane;
|
||||
inputs.rust-overlay = lib.mkDefault rust-overlay;
|
||||
};
|
||||
};
|
||||
}
|
||||
168
mill-scale.nix
Normal file
168
mill-scale.nix
Normal file
|
|
@ -0,0 +1,168 @@
|
|||
# mill-scale -- Another rust module for flakelight
|
||||
# Copyright (C) 2024 Robin Appelman <robin@icewind.nl>
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
{ lib, src, config, flakelight, inputs, ... }:
|
||||
let
|
||||
inherit (builtins) elem readFile pathExists isAttrs;
|
||||
inherit (lib) mkDefault mkIf mkMerge mkOption warnIf assertMsg optionalAttrs types mapCartesianProduct id optionals;
|
||||
inherit (lib.fileset) fileFilter toSource;
|
||||
inherit (flakelight.types) fileset;
|
||||
|
||||
cargoToml = fromTOML (readFile (src + /Cargo.toml));
|
||||
tomlPackage = cargoToml.package or cargoToml.workspace.package;
|
||||
hasMsrv = tomlPackage ? rust-version;
|
||||
hasWorkspace = tomlPackage ? workspace;
|
||||
hasFeatures = cargoToml ? features && isAttrs cargoToml.features;
|
||||
msrv = assert assertMsg hasMsrv ''"rust-version" not set in Cargo.toml''; tomlPackage.rust-version;
|
||||
tools = pkgs: with pkgs; [ cargo-edit bacon ];
|
||||
in
|
||||
warnIf (! builtins ? readFileType) "Unsupported Nix version in use."
|
||||
{
|
||||
options = {
|
||||
extraFiles = mkOption {
|
||||
type = with types; listOf str;
|
||||
default = [ ];
|
||||
};
|
||||
fileset = mkOption {
|
||||
type = fileset;
|
||||
default = fileFilter
|
||||
(file: file.hasExt "rs" || elem file.name ([ "Cargo.toml" "Cargo.lock" ] ++ config.extraFiles))
|
||||
src;
|
||||
};
|
||||
};
|
||||
|
||||
config = mkMerge [
|
||||
(mkIf (pathExists (src + /Cargo.toml)) {
|
||||
withOverlays = [
|
||||
(import inputs.rust-overlay)
|
||||
(final: { inputs, rust-bin, writeShellApplication, stdenvNoCC, ... } @ prev: rec {
|
||||
craneLib = (inputs.crane.mkLib final).overrideToolchain (p: p.latestRustToolchain);
|
||||
craneLibMsrv = (inputs.crane.mkLib final).overrideToolchain (p: p.msrvRustToolchain);
|
||||
cargoArtifacts = craneLib.buildDepsOnly
|
||||
{
|
||||
inherit src;
|
||||
strictDeps = true;
|
||||
};
|
||||
cargoArtifactsAllFeatures = craneLib.buildDepsOnly
|
||||
{
|
||||
inherit src;
|
||||
strictDeps = true;
|
||||
cargoExtraArgs = "--locked --all-features";
|
||||
};
|
||||
cargoArtifactsMsrv = craneLibMsrv.buildDepsOnly
|
||||
{
|
||||
inherit src;
|
||||
strictDeps = true;
|
||||
pnameSuffix = "-deps-all-features";
|
||||
};
|
||||
latestRustToolchain = rust-bin.stable.latest.default;
|
||||
msrvRustToolchain = rust-bin.stable.${msrv}.default;
|
||||
miriRustToolchain = rust-bin.selectLatestNightlyWith (toolchain: toolchain.default.override {
|
||||
extensions = [ "miri" "rust-src" ];
|
||||
});
|
||||
cargo-expand = (writeShellApplication {
|
||||
name = "cargo-expand";
|
||||
runtimeInputs = [ prev.cargo-expand ];
|
||||
text = ''
|
||||
# shellcheck disable=SC2068
|
||||
RUSTC_BOOTSTRAP=1 cargo-expand $@
|
||||
'';
|
||||
});
|
||||
cargo-miri = (writeShellApplication {
|
||||
name = "cargo-miri";
|
||||
runtimeInputs = [ miriRustToolchain ];
|
||||
text = ''
|
||||
# shellcheck disable=SC2068
|
||||
cargo miri $@
|
||||
'';
|
||||
});
|
||||
})
|
||||
];
|
||||
|
||||
description = mkIf (tomlPackage ? description) tomlPackage.description;
|
||||
|
||||
# license will need to be set if Cargo license is a complex expression
|
||||
license = mkIf (tomlPackage ? license) (mkDefault tomlPackage.license);
|
||||
|
||||
pname = tomlPackage.name;
|
||||
|
||||
packages = {
|
||||
default = { craneLib, cargoArtifacts, defaultMeta }: craneLib.buildPackage {
|
||||
src = toSource { root = src; inherit (config) fileset; };
|
||||
inherit cargoArtifacts;
|
||||
doCheck = false;
|
||||
strictDeps = true;
|
||||
meta = defaultMeta;
|
||||
};
|
||||
};
|
||||
|
||||
checks = { craneLib, craneLibMsrv, cargoArtifacts, cargoArtifactsMsrv, cargoArtifactsAllFeatures, ... }: {
|
||||
test = craneLib.cargoTest {
|
||||
inherit src cargoArtifacts;
|
||||
cargoExtraArgs = "--locked --all-targets --workspace";
|
||||
};
|
||||
clippy = craneLib.cargoClippy {
|
||||
inherit src cargoArtifacts;
|
||||
strictDeps = true;
|
||||
cargoClippyExtraArgs = "--all-targets -- --deny warnings";
|
||||
};
|
||||
} // (optionalAttrs hasMsrv {
|
||||
msrv = craneLibMsrv.buildPackage {
|
||||
inherit src;
|
||||
cargoArtifacts = cargoArtifactsMsrv;
|
||||
strictDeps = true;
|
||||
doCheck = false;
|
||||
cargoBuildCommand = "cargo check";
|
||||
cargoExtraArgs = "--all-targets";
|
||||
installPhaseCommand = "mkdir $out";
|
||||
};
|
||||
}) // (optionalAttrs hasFeatures {
|
||||
test-all-features = craneLib.cargoTest {
|
||||
inherit src;
|
||||
strictDeps = true;
|
||||
cargoArtifacts = cargoArtifactsAllFeatures;
|
||||
cargoExtraArgs = "--locked --all-targets --all-features --workspace";
|
||||
};
|
||||
clippy-all-features = craneLib.cargoClippy {
|
||||
inherit src;
|
||||
strictDeps = true;
|
||||
cargoArtifacts = cargoArtifactsAllFeatures;
|
||||
cargoClippyExtraArgs = "--all-targets --all-features -- --deny warnings";
|
||||
};
|
||||
});
|
||||
|
||||
apps = { cargo-miri, cargo-semver-checks, ... }: {
|
||||
miri = "${cargo-miri}/bin/cargo-miri";
|
||||
semver-checks = "${cargo-semver-checks}/bin/cargo-semver-checks semver-checks";
|
||||
};
|
||||
})
|
||||
|
||||
rec {
|
||||
devShells = rec {
|
||||
default = {
|
||||
packages = pkgs: with pkgs; [ latestRustToolchain ] ++ tools pkgs;
|
||||
|
||||
env = { rustPlatform, ... }: {
|
||||
RUST_SRC_PATH = toString rustPlatform.rustLibSrc;
|
||||
};
|
||||
};
|
||||
miri = {
|
||||
packages = pkgs: with pkgs; [ miriRustToolchain cargo-edit bacon ] ++ tools pkgs;
|
||||
|
||||
inherit (default) env;
|
||||
};
|
||||
} // (optionalAttrs hasMsrv {
|
||||
msrv = {
|
||||
packages = pkgs: with pkgs; [ msrvRustToolchain cargo-edit bacon ] ++ tools pkgs;
|
||||
|
||||
inherit (devShells.default) env;
|
||||
};
|
||||
});
|
||||
|
||||
formatters = pkgs: {
|
||||
"*.rs" = "${pkgs.rustfmt}/bin/rustfmt";
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue