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