bwtui/flake.nix

118 lines
3.4 KiB
Nix
Raw Normal View History

{
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;
cargoVendorDir = null;
};
cargoArtifacts = craneLib.buildDepsOnly commonArgs;
commonArgsWithArtifacts = commonArgs // { inherit cargoArtifacts; };
cargoTypos = args:
craneLib.mkCargoDerivation (commonArgs // args // {
cargoArtifacts = null;
buildPhaseCargoCommand = "typos";
pnameSuffix = "-typos";
nativeBuildInputs = (args.nativeBuildInputs or [ ])
++ (with pkgs; [ typos protobuf ]);
preInstallPhases = [ "ensureTargetDir" ]
++ (args.preInstallPhases or [ ]);
ensureTargetDir = ''
mkdir -p ''${CARGO_TARGET_DIR:-target}
'';
});
shouldRunCoverage = system == "x86_64-linux"
&& ((builtins.getEnv "CI") != "");
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;
};
devShells.default = pkgs.mkShell {
inputsFrom = builtins.attrValues self.checks.${system};
nativeBuildInputs = with pkgs; [
cargo-expand
deadnix
nixfmt
nodePackages.prettier
rustToolchain
statix
xorg.libxcb
openssl
];
};
});
}