diff options
Diffstat (limited to 'nix')
| -rw-r--r-- | nix/fetch-crate.nix | 17 | ||||
| -rw-r--r-- | nix/flake.nix | 21 |
2 files changed, 37 insertions, 1 deletions
diff --git a/nix/fetch-crate.nix b/nix/fetch-crate.nix new file mode 100644 index 0000000..733d83a --- /dev/null +++ b/nix/fetch-crate.nix @@ -0,0 +1,17 @@ +fetchurl: attrs: +let + crate = builtins.match "https://crates[.]io/api/v1/crates/([^/]+)/([^/]+)/download" ( + attrs.url or "" + ); +in +fetchurl ( + attrs + // ( + if crate == null then + { } + else + { + url = "https://static.crates.io/crates/${builtins.elemAt crate 0}/${builtins.elemAt crate 0}-${builtins.elemAt crate 1}.crate"; + } + ) +) diff --git a/nix/flake.nix b/nix/flake.nix index b140bf0..33dbe42 100644 --- a/nix/flake.nix +++ b/nix/flake.nix @@ -44,7 +44,11 @@ # Expose external flake packages so common.nix can list them next to # nixpkgs packages without threading inputs into every module. (final: prev: { - tuicr = tuicr.packages.${system}.default; + tuicr = + (final.callPackage tuicr.inputs.naersk { + fetchurl = import ./fetch-crate.nix final.fetchurl; + }).buildPackage + tuicr; aibox = aibox.packages.${system}.default; claude-release = prev.claude-code.overrideAttrs { version = releases.claude.version; @@ -257,6 +261,21 @@ }; in { + checks.${system}.crate-download = + let + lock = builtins.fromTOML (builtins.readFile "${tuicr}/Cargo.lock"); + crate = builtins.head ( + builtins.filter ( + package: (package.source or "") == "registry+https://github.com/rust-lang/crates.io-index" + ) lock.package + ); + in + import ./fetch-crate.nix pkgs.fetchurl { + name = "crate-download-check-${crate.name}-${crate.version}"; + url = "https://crates.io/api/v1/crates/${crate.name}/${crate.version}/download"; + sha256 = crate.checksum; + }; + devShells.${system}.default = pkgs.mkShellNoCC { packages = with pkgs; [ basedpyright |
