damocles-daemon/flake.nix

137 lines
3.2 KiB
Nix

{
description = "damocles-daemon - Matrix chat presence for Damocles";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
crane.url = "github:ipetkov/crane";
treefmt-nix = {
url = "github:numtide/treefmt-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs =
{
self,
nixpkgs,
crane,
treefmt-nix,
...
}:
let
systems = [
"x86_64-linux"
"aarch64-linux"
];
forAllSystems =
f:
nixpkgs.lib.genAttrs systems (
system:
let
pkgs = nixpkgs.legacyPackages.${system};
craneLib = crane.mkLib pkgs;
src = craneLib.cleanCargoSource ./.;
commonArgs = {
inherit src;
pname = "damocles-daemon";
version = "0.1.0";
nativeBuildInputs = with pkgs; [ pkg-config ];
buildInputs = with pkgs; [
openssl
sqlite
];
};
# deps-only build - cached separately, only rebuilds when Cargo.lock changes
cargoArtifacts = craneLib.buildDepsOnly commonArgs;
in
f {
inherit
pkgs
craneLib
commonArgs
cargoArtifacts
;
treefmt-eval = treefmt-nix.lib.evalModule pkgs treefmt-config;
}
);
treefmt-config = {
projectRootFile = "flake.nix";
programs.nixfmt.enable = true;
programs.rustfmt.enable = true;
programs.taplo.enable = true;
};
in
{
packages = forAllSystems (
{
craneLib,
commonArgs,
cargoArtifacts,
...
}:
{
default = craneLib.buildPackage (
commonArgs
// {
inherit cargoArtifacts;
meta = {
description = "Matrix chat daemon for Damocles";
mainProgram = "damocles-daemon";
platforms = nixpkgs.lib.platforms.linux;
};
}
);
}
);
devShells = forAllSystems (
{ pkgs, ... }:
{
default = pkgs.mkShell {
packages = with pkgs; [
cargo
rustc
rust-analyzer
clippy
rustfmt
pkg-config
openssl
sqlite
];
};
}
);
formatter = forAllSystems ({ treefmt-eval, ... }: treefmt-eval.config.build.wrapper);
checks = forAllSystems (
{
pkgs,
craneLib,
commonArgs,
cargoArtifacts,
treefmt-eval,
...
}:
{
formatting = treefmt-eval.config.build.check self;
build = self.packages.${pkgs.stdenv.hostPlatform.system}.default;
clippy = craneLib.cargoClippy (
commonArgs
// {
inherit cargoArtifacts;
cargoClippyExtraArgs = "--all-targets";
}
);
tests = craneLib.cargoTest (
commonArgs
// {
inherit cargoArtifacts;
}
);
}
);
};
}