diff options
Diffstat (limited to 'lib/nix-thin-edge-builder/flake.nix')
-rw-r--r-- | lib/nix-thin-edge-builder/flake.nix | 162 |
1 files changed, 99 insertions, 63 deletions
diff --git a/lib/nix-thin-edge-builder/flake.nix b/lib/nix-thin-edge-builder/flake.nix index 8ece62d3..904d0c93 100644 --- a/lib/nix-thin-edge-builder/flake.nix +++ b/lib/nix-thin-edge-builder/flake.nix @@ -1,7 +1,7 @@ { inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; - crane.url = "github:ipetkov/crane"; + crane.url = "github:TheNeikos/crane/fix/use_unsafe"; crane.inputs.nixpkgs.follows = "nixpkgs"; flake-utils.url = "github:numtide/flake-utils"; }; @@ -12,76 +12,112 @@ craneLib = crane.lib.${system}; pkgs = import nixpkgs { inherit system; }; in - { - lib = rec { - officialComponents = [ - (mkThinEdgeComponent { src = ../../plugins/plugin_avg; pluginBuilderPath = "foo"; }) - ]; + { + lib = rec { + officialComponents = [ + (mkThinEdgeComponent { src = ../../plugins/plugin_avg; pluginBuilderPath = "plugin_avg::AvgPluginBuilder"; }) + ]; - mkThinEdgeComponent = attrs@{ - name ? null, - version ? null, - src, - pluginBuilderPath, - }: - let - crateInfo = craneLib.crateNameFromCargoToml { - cargoToml = "${src}/Cargo.toml"; - }; - in { - name = if builtins.isNull name - then crateInfo.pname - else name; + mkThinEdgeComponent = + attrs@{ name ? null + , version ? null + , nativeBuildInputs ? [ ] + , buildInputs ? [ ] + , src + , pluginBuilderPath + , + }: + let + crateInfo = craneLib.crateNameFromCargoToml { + cargoToml = "${src}/Cargo.toml"; + }; + in + { + name = + if builtins.isNull name + then crateInfo.pname + else name; - version = if builtins.isNull version - then crateInfo.version - else version; + version = + if builtins.isNull version + then crateInfo.version + else version; - inherit src pluginBuilderPath; - }; + inherit src pluginBuilderPath nativeBuildInputs buildInputs; + }; + + mkThinEdgeCrateSource = + attrs@{ defaultComponents ? officialComponents + , extraComponents ? [ ] + , + }: + let + allComponents = defaultComponents ++ extraComponents; + + writeCargoToml = import ./writeCargoToml.nix; + writeSrcMainRs = import ./writeSrcMainRs.nix; + writeCargoRegistry = import ./writeCargoRegistry.nix; - mkThinEdgeCrateSource = attrs@{ - defaultComponents ? officialComponents, - extraComponents ? [], - }: - let - allComponents = defaultComponents ++ extraComponents; + cargoToml = writeCargoToml { + inherit pkgs craneLib; + components = allComponents; + }; - writeCargoToml = import ./writeCargoToml.nix; - writeSrcMainRs = import ./writeSrcMainRs.nix; + srcmainrs = writeSrcMainRs { + inherit pkgs craneLib; + components = allComponents; + }; - cargoToml = writeCargoToml { - inherit craneLib; - components = allComponents; - }; + cargoConfig = writeCargoRegistry { + inherit pkgs craneLib; + }; - srcmainrs = writeSrcMainRs { - inherit pkgs craneLib; - components = allComponents; - }; + thinEdgeLockFile = pkgs.runCommand "buildThinEdgeLockFile" { } '' + mkdir -p src + mkdir -p .cargo + mkdir -p home + HOME=$(pwd)/home + cp -v "${cargoToml}" Cargo.toml + cp -v "${cargoConfig}" .cargo/config.toml + cp -v "${srcmainrs}" src/main.rs + ${pkgs.cargo}/bin/cargo -v generate-lockfile --offline + cp Cargo.lock $out + ''; - thinEdgeCrateSrc = pkgs.runCommand "buildThinEdgeCrateSrc" {} '' - mkdir -p $out/src - cp -v "${cargoToml}" $out/Cargo.toml - cp -v "${srcmainrs}" $out/src/main.rs - ''; - in thinEdgeCrateSrc; + thinEdgeCrateSrc = pkgs.runCommand "buildThinEdgeCrateSrc" { } '' + mkdir -p $out/src + mkdir -p $out/.cargo + mkdir -p $out/home + cp -v "${cargoToml}" $out/Cargo.toml + cp -v "${thinEdgeLockFile}" $out/Cargo.lock + cp -v "${srcmainrs}" $out/src/main.rs + ''; + in + thinEdgeCrateSrc; - mkThinEdge = attrs@{ - defaultComponents ? officialComponents, - extraComponents ? [], - }: - let - thinEdgeCrateSrc = mkThinEdgeCrateSource { - inherit defaultComponents extraComponents; - }; + mkThinEdge = + attrs@{ defaultComponents ? officialComponents + , extraComponents ? [ ] + }: + let + thinEdgeCrateSrc = mkThinEdgeCrateSource { + inherit defaultComponents extraComponents; + }; + collectedInputs = { + buildInputs = pkgs.lib.lists.concatMap (comp: comp.buildInputs) extraComponents; + nativeBuildInputs = pkgs.lib.lists.concatMap (comp: comp.nativeBuildInputs) extraComponents; + }; - builtPackage = craneLib.buildPackage { - pname = "thin-edge"; - version = "0.1.0"; - src = thinEdgeCrateSrc; - }; - in builtPackage; - }; - }); + + builtPackage = craneLib.buildPackage { + pname = "thin-edge"; + version = "0.1.0"; + src = thinEdgeCrateSrc; + buildInputs = collectedInputs.buildInputs; + nativeBuildInputs = collectedInputs.nativeBuildInputs; + }; + in + builtPackage; + }; + }); } |