This commit is contained in:
parent
f2ea15fa7c
commit
b4bc4ce599
5 changed files with 124 additions and 76 deletions
|
@ -1,81 +1,14 @@
|
||||||
{
|
{
|
||||||
inputs = {
|
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
inputs.git-hooks.url = "github:cachix/git-hooks.nix";
|
||||||
git-hooks.url = "github:cachix/git-hooks.nix";
|
inputs.git-hooks.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
git-hooks.inputs.nixpkgs.follows = "nixpkgs";
|
outputs = inputs: let
|
||||||
};
|
inherit (import nix/boilerplate.nix inputs) fullImport genPkgs;
|
||||||
outputs = {
|
|
||||||
self,
|
|
||||||
git-hooks,
|
|
||||||
nixpkgs,
|
|
||||||
}: let
|
|
||||||
inherit (self) outputs;
|
|
||||||
systems = ["aarch64-linux" "aarch64-darwin" "x86_64-darwin" "x86_64-linux"];
|
|
||||||
forSystems = nixpkgs.lib.genAttrs systems;
|
|
||||||
pkgsFor = system: (import nixpkgs {inherit system;}).extend outputs.overlays.default;
|
|
||||||
genPkgs = func: (forSystems (system: func (pkgsFor system)));
|
|
||||||
in {
|
in {
|
||||||
checks = genPkgs (pkgs: {
|
# overlays = import nix/overlays.nix;
|
||||||
git-hooks = git-hooks.lib.${pkgs.system}.run {
|
checks = fullImport nix/checks.nix;
|
||||||
src = ./.;
|
packages = fullImport nix/packages.nix;
|
||||||
hooks = {
|
devShells = fullImport nix/shells.nix;
|
||||||
alejandra.enable = true;
|
|
||||||
cargo-check.enable = true;
|
|
||||||
clippy = {
|
|
||||||
enable = true;
|
|
||||||
packageOverrides.cargo = pkgs.cargo;
|
|
||||||
packageOverrides.clippy = pkgs.rustPackages.clippy;
|
|
||||||
};
|
|
||||||
rustfmt = {
|
|
||||||
enable = true;
|
|
||||||
packageOverrides.rustfmt = pkgs.rustfmt;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
packages = genPkgs (pkgs: {
|
|
||||||
my-package = pkgs.rustPlatform.buildRustPackage {
|
|
||||||
pname = "my-package";
|
|
||||||
version = "0.1.0";
|
|
||||||
|
|
||||||
/*
|
|
||||||
nativeBuildInputs = with pkgs; [
|
|
||||||
pkg-config
|
|
||||||
clang
|
|
||||||
];
|
|
||||||
|
|
||||||
buildInputs = with pkgs; [
|
|
||||||
];
|
|
||||||
*/
|
|
||||||
|
|
||||||
src = ./.;
|
|
||||||
hash = pkgs.lib.fakeHash;
|
|
||||||
cargoHash = "sha256-W7VQlMktGsRPQL9VGVmxYV6C5u2eJ48S7eTpOM+3n8U=";
|
|
||||||
|
|
||||||
RUSTFLAGS = pkgs.lib.optionalString pkgs.stdenv.isLinux "-C link-arg=-fuse-ld=mold";
|
|
||||||
};
|
|
||||||
|
|
||||||
default = outputs.packages.${pkgs.system}.my-package;
|
|
||||||
});
|
|
||||||
|
|
||||||
devShells = genPkgs (pkgs: {
|
|
||||||
default = pkgs.mkShell {
|
|
||||||
inherit (self.checks.${pkgs.system}.git-hooks) shellHook;
|
|
||||||
inputsFrom = [outputs.packages.${pkgs.system}.default];
|
|
||||||
packages = with pkgs; [
|
|
||||||
rustPackages.clippy
|
|
||||||
rust-analyzer
|
|
||||||
rustfmt
|
|
||||||
lldb
|
|
||||||
];
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
overlays = {
|
|
||||||
default = final: prev: {};
|
|
||||||
};
|
|
||||||
|
|
||||||
formatter = genPkgs (p: p.alejandra);
|
formatter = genPkgs (p: p.alejandra);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
16
templates/rust/nix/boilerplate.nix
Normal file
16
templates/rust/nix/boilerplate.nix
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
inputs @ {
|
||||||
|
nixpkgs,
|
||||||
|
self,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
forSelfOverlay =
|
||||||
|
if builtins.hasAttr "forSelf" self.overlays
|
||||||
|
then self.overlays.forSelf
|
||||||
|
else (_: p: p);
|
||||||
|
in rec {
|
||||||
|
systems = ["aarch64-linux" "x86_64-linux" "x86_64-darwin" "aarch64-darwin"];
|
||||||
|
forSystems = nixpkgs.lib.genAttrs systems;
|
||||||
|
pkgsFor = system: ((import nixpkgs {inherit system;}).extend forSelfOverlay);
|
||||||
|
genPkgs = func: (forSystems (system: func (pkgsFor system)));
|
||||||
|
call = imported: genPkgs (pkgs: imported (inputs // {inherit pkgs;}));
|
||||||
|
}
|
25
templates/rust/nix/checks.nix
Normal file
25
templates/rust/nix/checks.nix
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
git-hooks,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
git-hooks = git-hooks.lib.${pkgs.system}.run {
|
||||||
|
src = ./..;
|
||||||
|
hooks = {
|
||||||
|
alejandra.enable = true;
|
||||||
|
cargo-check.enable = true;
|
||||||
|
convco.enable = true;
|
||||||
|
cargo-test = {
|
||||||
|
enable = true;
|
||||||
|
name = "cargo-test";
|
||||||
|
entry = "cargo test";
|
||||||
|
# types = ["rust"];
|
||||||
|
# language = "rust";
|
||||||
|
pass_filenames = false;
|
||||||
|
stages = ["pre-commit"];
|
||||||
|
};
|
||||||
|
clippy.enable = true;
|
||||||
|
rustfmt.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
52
templates/rust/nix/packages.nix
Normal file
52
templates/rust/nix/packages.nix
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
{pkgs, ...}: rec {
|
||||||
|
lyrs = pkgs.rustPlatform.buildRustPackage {
|
||||||
|
pname = "lyrs";
|
||||||
|
version = "0.1.0";
|
||||||
|
|
||||||
|
/*
|
||||||
|
nativeBuildInputs = with pkgs; [
|
||||||
|
pkg-config
|
||||||
|
clang
|
||||||
|
];
|
||||||
|
|
||||||
|
buildInputs = with pkgs; [
|
||||||
|
];
|
||||||
|
*/
|
||||||
|
|
||||||
|
src = ./..;
|
||||||
|
hash = pkgs.lib.fakeHash;
|
||||||
|
cargoHash = "sha256-XHCXOlG4sdr1A3lqIK/7bB3soms1jxMIdfsFABmHVog=";
|
||||||
|
};
|
||||||
|
|
||||||
|
pwatch = pkgs.writeShellScriptBin "pwatch" ''
|
||||||
|
dir="$(dirname "$(cargo locate-project --workspace --message-format plain)")"
|
||||||
|
pushd "$dir"
|
||||||
|
|
||||||
|
additional_watchexec_args=""
|
||||||
|
if [[ -f apps/$pkg/build.rs ]]; then
|
||||||
|
additional_watchexec_args="--watch apps/$pkg/build.rs"
|
||||||
|
fi
|
||||||
|
|
||||||
|
pkg="$1"; shift
|
||||||
|
cargo_subcmd="$1"; shift
|
||||||
|
cargo_subcmd_args="$@"; shift
|
||||||
|
|
||||||
|
argfile="apps/$pkg/.watchexec.argfile"
|
||||||
|
argfile_args=""
|
||||||
|
|
||||||
|
if [[ -f $argfile ]]; then
|
||||||
|
argfile_args="@$argfile"
|
||||||
|
fi
|
||||||
|
watchexec $argfile_args --stop-timeout 0s --restart \
|
||||||
|
--watch Cargo.toml \
|
||||||
|
--watch libs \
|
||||||
|
--watch apps/$pkg/src/ \
|
||||||
|
--watch apps/$pkg/Cargo.toml \
|
||||||
|
$additional_watchexec_args \
|
||||||
|
cargo "$cargo_subcmd" --package "$pkg" "$cargo_subcmd_args"
|
||||||
|
|
||||||
|
popd
|
||||||
|
'';
|
||||||
|
|
||||||
|
default = lyrs;
|
||||||
|
}
|
22
templates/rust/nix/shells.nix
Normal file
22
templates/rust/nix/shells.nix
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
{
|
||||||
|
self,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
inherit (pkgs) system;
|
||||||
|
in rec {
|
||||||
|
lyrs-dev = pkgs.mkShell {
|
||||||
|
inherit (self.checks.${system}.git-hooks) shellHook;
|
||||||
|
inputsFrom = [self.packages.${system}.lyrs];
|
||||||
|
packages = with pkgs; [
|
||||||
|
convco
|
||||||
|
rustPackages.clippy
|
||||||
|
typescript-language-server
|
||||||
|
rust-analyzer
|
||||||
|
rustfmt
|
||||||
|
nixd
|
||||||
|
lldb
|
||||||
|
];
|
||||||
|
};
|
||||||
|
default = lyrs-dev;
|
||||||
|
}
|
Loading…
Reference in a new issue