let lock = builtins.readFile ./flake.lock |> builtins.fromJSON; defaultNixpkgs = builtins.fetchTarball { inherit (lock.nodes.nixpkgs.locked) url; sha256 = lock.nodes.nixpkgs.locked.narHash; }; disko = builtins.fetchTarball { url = "https://github.com/nix-community/disko/archibe/${lock.nodes.disko.locked.rev}tar.gz"; sha256 = lock.nodes.disko.locked.narHash; }; in { pkgs ? import defaultNixpkgs { }, localSystem ? builtins.currentSystem, crossSystem ? null, ... }: let inherit (pkgs) lib; inherit (lib) packagesFromDirectoryRecursive ; importDir = import lib/importDir.nix { inherit lib; }; overlay = final: _: let depotPackages = packagesFromDirectoryRecursive { callPackage = lib.callPackageWith (final // { inherit depotPackages; }); directory = ./packages; }; in { inherit depotPackages; depot = depotPackages; }; newPkgs = import defaultNixpkgs { config = { allowUnfree = true; allowUnfreeRedistributable = true; }; overlays = [ overlay ]; }; nixosModules = importDir ./modules (builtins.mapAttrs (_: { path, ... }: path)); machines = importDir ./machines ( entries: let defaultModule = { config, ... }: { nixpkgs.overlays = [ overlay ]; system.stateVersion = lib.mkDefault config.system.nixos.release; }; buildNixOS = hostName: entry: import (pkgs.path + "/nixos/lib/eval-config.nix") { modules = [ defaultModule entry.path nixosModules.xnet nixosModules.disk nixosModules.desktop nixosModules.network nixosModules.sshd nixosModules.users ("${disko}/module.nix") ]; }; in builtins.mapAttrs buildNixOS entries ); in { pkgs = newPkgs; inherit (newPkgs) depotPackages; inherit machines; }