107 lines
3.5 KiB
Nix
107 lines
3.5 KiB
Nix
{
|
|
description = "Decrypt your LUKS partition using a FIDO2 compatible authenticator";
|
|
|
|
inputs = {
|
|
utils.url = "github:numtide/flake-utils";
|
|
cargo-deb = {
|
|
flake = false;
|
|
url = "github:mmstick/cargo-deb";
|
|
};
|
|
naersk = {
|
|
url = "github:nmattia/naersk";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
};
|
|
|
|
outputs = { self, nixpkgs, utils, naersk, cargo-deb }:
|
|
let
|
|
root = ./.;
|
|
pname = (builtins.fromTOML (builtins.readFile ./Cargo.toml)).package.name;
|
|
forPkgs = pkgs:
|
|
let
|
|
naersk-lib = naersk.lib."${pkgs.system}";
|
|
buildInputs = with pkgs; [ cryptsetup ];
|
|
LIBCLANG_PATH = "${pkgs.clang.cc.lib}/lib";
|
|
nativeBuildInputs = with pkgs; [
|
|
pkgconfig
|
|
clang
|
|
];
|
|
in
|
|
rec {
|
|
# `nix build`
|
|
packages.${pname} = naersk-lib.buildPackage {
|
|
inherit pname root buildInputs nativeBuildInputs LIBCLANG_PATH;
|
|
};
|
|
|
|
packages."${pname}-deb" =
|
|
let
|
|
cargoDeb = naersk-lib.buildPackage {
|
|
pname = "cargo-deb";
|
|
root = cargo-deb;
|
|
};
|
|
pkg = packages.${pname};
|
|
vm = pkgs.vmTools.diskImageFuns.ubuntu1804x86_64 { extraPackages = [ "cargo" "cryptsetup" "libclang-dev" "libcryptsetup-dev" ]; };
|
|
makefile = pkgs.writeText "Makefile" "
|
|
.PHONY: install
|
|
|
|
cargo-deb:
|
|
cargo install --debug --path cargo-deb
|
|
|
|
install: cargo-deb
|
|
cargo-deb
|
|
mkdir -p debs
|
|
cp target/debian/*.deb debs/
|
|
|
|
";
|
|
src = pkgs.runCommandLocal "${pname}-vendored" {} ''
|
|
mkdir -p $out/.cargo $out/cargo-deb/.cargo
|
|
printf '${pkg.cargoconfig}' > $out/.cargo/config.toml;
|
|
printf '${cargoDeb.cargoconfig}' > $out/cargo-deb/.cargo/config.toml;
|
|
printf '.PHONY: install\ninstall:\n\tcargo install --debug --path cargo-deb\n\tcargo-deb\n\tmkdir -p debs\n\tcp target/debian/*.deb debs/' > $out/Makefile
|
|
cp -r ${pkg.src}/. $out/
|
|
cp -r ${cargoDeb.src}/. $out/cargo-deb/
|
|
'';
|
|
args = {
|
|
diskImage = vm;
|
|
inherit src;
|
|
name = pname;
|
|
buildInputs = [ ];
|
|
meta.description = "No descr";
|
|
};
|
|
in
|
|
pkgs.releaseTools.debBuild args;
|
|
|
|
defaultPackage = packages.${pname};
|
|
|
|
# `nix run`
|
|
apps.${pname} = utils.lib.mkApp {
|
|
drv = packages.${pname};
|
|
};
|
|
defaultApp = apps.${pname};
|
|
|
|
# `nix flake check`
|
|
checks = {
|
|
fmt = with pkgs; runCommandLocal "${pname}-fmt" { buildInputs = [ cargo rustfmt nixpkgs-fmt ]; } ''
|
|
cd ${root}
|
|
cargo fmt -- --check
|
|
nixpkgs-fmt --check *.nix
|
|
touch $out
|
|
'';
|
|
};
|
|
|
|
hydraJobs = checks // packages;
|
|
|
|
# `nix develop`
|
|
devShell = pkgs.mkShell {
|
|
nativeBuildInputs = with pkgs; [ rustc cargo rustfmt nixpkgs-fmt ] ++ nativeBuildInputs;
|
|
inherit buildInputs LIBCLANG_PATH;
|
|
};
|
|
};
|
|
forSystem = system: forPkgs nixpkgs.legacyPackages."${system}";
|
|
in
|
|
(utils.lib.eachSystem [ "aarch64-linux" "i686-linux" "x86_64-linux" ] forSystem) // {
|
|
overlay = final: prev: (forPkgs final).packages;
|
|
};
|
|
|
|
}
|