bwtui/flake.nix
Christoph Heiss d531c967f1
All checks were successful
flake / build (push) Successful in 10m2s
nightly build / build (push) Successful in 10m3s
flake: simplify dev shell declaration
Signed-off-by: Christoph Heiss <christoph@c8h4.io>
2024-08-16 16:36:42 +02:00

121 lines
3.6 KiB
Nix

{
description = "bwtui - A terminal-based vault browser for Bitwarden.";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs";
flake-utils.url = "github:numtide/flake-utils";
treefmt-nix = {
url = "github:numtide/treefmt-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
crane = {
url = "github:ipetkov/crane";
inputs.nixpkgs.follows = "nixpkgs";
};
rust-overlay = {
url = "github:oxalica/rust-overlay";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs =
{ self, nixpkgs, flake-utils, treefmt-nix, crane, rust-overlay, ... }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs {
inherit system;
overlays = [ (import rust-overlay) ];
};
inherit (pkgs) lib;
treefmt = treefmt-nix.lib.evalModule pkgs {
projectRootFile = "flake.nix";
programs = {
deadnix.enable = true;
nixfmt = {
enable = true;
package = pkgs.nixfmt-classic;
};
prettier.enable = true;
statix.enable = true;
taplo.enable = true;
};
};
rustToolchain = pkgs.rust-bin.stable.latest.default.override {
extensions = [ "rust-analyzer" ];
};
craneLib = (crane.mkLib pkgs).overrideToolchain rustToolchain;
src = craneLib.cleanCargoSource (craneLib.path ./.);
commonArgs = {
inherit src;
strictDeps = true;
nativeBuildInputs = with pkgs; [ pkg-config ];
buildInputs = with pkgs; [ openssl ];
};
cargoTypos = args:
craneLib.mkCargoDerivation (args // {
cargoArtifacts = null;
cargoVendorDir = null;
buildPhaseCargoCommand = "typos";
pnameSuffix = "-typos";
nativeBuildInputs = (args.nativeBuildInputs or [ ])
++ (with pkgs; [ typos cargo-machete ]);
preInstallPhases = [ "ensureTargetDir" ]
++ (args.preInstallPhases or [ ]);
ensureTargetDir = ''
mkdir -p ''${CARGO_TARGET_DIR:-target}
'';
});
shouldRunCoverage = system == "x86_64-linux"
&& ((builtins.getEnv "CI") != "");
cargoArtifacts = craneLib.buildDepsOnly commonArgs;
commonArgsWithArtifacts = commonArgs // { inherit cargoArtifacts; };
bwtui = craneLib.buildPackage commonArgsWithArtifacts;
in {
checks = {
inherit bwtui;
default = bwtui;
formatting = treefmt.config.build.check self;
bwtui-clippy = craneLib.cargoClippy (commonArgsWithArtifacts // {
cargoClippyExtraArgs = "--all-targets -- --deny warnings";
});
bwtui-doc = craneLib.cargoDoc commonArgsWithArtifacts;
bwtui-fmt = craneLib.cargoFmt commonArgs;
bwtui-typos = cargoTypos commonArgs;
} // lib.optionalAttrs shouldRunCoverage {
bwtui-coverage = craneLib.cargoTarpaulin commonArgsWithArtifacts;
};
formatter = treefmt.config.build.wrapper;
packages = rec {
inherit bwtui;
default = bwtui;
};
apps = let bwtuiApp = flake-utils.lib.mkApp { drv = bwtui; };
in {
bwtui = bwtuiApp;
default = bwtuiApp;
};
devShells.default = pkgs.mkShell {
inputsFrom = (builtins.attrValues self.checks.${system})
++ [ treefmt.config.build.devShell ];
nativeBuildInputs = with pkgs; [ rustToolchain ];
};
});
}