summaryrefslogtreecommitdiffstatshomepage
path: root/nix
diff options
context:
space:
mode:
Diffstat (limited to 'nix')
-rw-r--r--nix/fetch-crate.nix17
-rw-r--r--nix/flake.nix21
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