{ inputs, self, lib, ... }: { perSystem = { self', pkgs, ... }: let flakeLock = lib.importJSON (self + /flake.lock); flakeInputs = (builtins.removeAttrs inputs [ "self" ]); flakeLockVendoredDeps = flakeLock // { nodes = flakeLock.nodes // ( lib.flip lib.mapAttrs flakeInputs (name: _: flakeLock.nodes.${name} // { locked = { inherit (flakeLock.nodes.${name}.locked) narHash; lastModified = # lol, nixpkgs has a different timestamp on the fs??? if name == "nixpkgs" then 0 else 1; path = "${inputs.${name}}"; type = "path"; }; }) ); }; flakeLockFile = builtins.toFile "clan-core-flake.lock" (builtins.toJSON flakeLockVendoredDeps); clanCoreWithVendoredDeps = lib.trace flakeLockFile pkgs.runCommand "clan-core-with-vendored-deps" { } '' cp -r ${self} $out chmod +w -R $out cp ${flakeLockFile} $out/flake.lock ''; in { devShells.clan-cli = pkgs.callPackage ./shell.nix { inherit (self'.packages) clan-cli; }; packages = { clan-cli = pkgs.python3.pkgs.callPackage ./default.nix { inherit (inputs) nixpkgs; clan-core-path = clanCoreWithVendoredDeps; }; default = self'.packages.clan-cli; }; checks = self'.packages.clan-cli.tests; }; }