summaryrefslogtreecommitdiffstatshomepage
path: root/nix
diff options
context:
space:
mode:
authorsommerfeld <sommerfeld@sommerfeld.dev>2026-09-17 15:05:36 +0100
committersommerfeld <sommerfeld@sommerfeld.dev>2026-09-17 15:05:36 +0100
commit64f4695932ff4d27967cf4f0e854e40371dbcc90 (patch)
treefd7106349ed3705a6de32b3a42e952f2c07582db /nix
parente67e4fefb7085f94aff5712e9fdbf21ef085f494 (diff)
downloaddotfiles-64f4695932ff4d27967cf4f0e854e40371dbcc90.tar.gz
dotfiles-64f4695932ff4d27967cf4f0e854e40371dbcc90.tar.bz2
dotfiles-64f4695932ff4d27967cf4f0e854e40371dbcc90.zip
Fetch Rust crates from the static archive server
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