{ inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05"; unstable.url = "github:nixos/nixpkgs"; home-manager = { url = "github:nix-community/home-manager/release-24.05"; inputs.nixpkgs.follows = "nixpkgs"; }; nur.url = "github:nix-community/NUR"; impermanence.url = "github:nix-community/impermanence"; hm-isolation.url = "/home/ale/hm-isolation"; nixvirt = { url = "/home/ale/NixVirt"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = flakes@{ self, nixpkgs, unstable, home-manager, nur, impermanence, hm-isolation, nixvirt }: let system = "x86_64-linux"; pkgs = pkgsNoLocal.extend self.overlays.default; pkgsNoLocal = importPkgs nixpkgs; importPkgs = flake: import flake { inherit system; config = import ./pkgs/config nixpkgs.lib; overlays = [ nur.overlay ]; }; util = import ./util; inherit (util pkgs.lib) importAll; local = import ./pkgs; in with pkgs.lib; { formatter.${system} = pkgs.nixpkgs-fmt; packages.${system} = local pkgs pkgsNoLocal; overlays.default = final: prev: let locals = local final prev; in { local = locals; unstable = (importPkgs unstable).extend self.overlays.default; } // locals.override; nixosConfigurations = let nixosSystem = { modules }: makeOverridable nixpkgs.lib.nixosSystem { inherit pkgs system; modules = modules ++ [ nixpkgs.nixosModules.notDetected impermanence.nixosModule ]; specialArgs = { inherit flakes; }; }; hostConfig = host: nixosSystem { modules = [ ./sys host nixvirt.nixosModules.default ]; }; in mapAttrs (_: hostConfig) (importAll { root = ./sys/platform; }) // { dmz = nixosSystem { modules = [ ./dmz ]; }; }; homeConfigurations = let registry = { ... }: { config.nix.registry = { "nixpkgs".flake = nixpkgs; "unstable".flake = unstable; "nur".flake = nur; }; }; home = platform: home-manager.lib.homeManagerConfiguration { inherit pkgs; modules = [ ./home platform registry hm-isolation.homeManagerModule ]; }; platformHome = platform: let value = home platform; in { inherit value; name = "${value.config.home.username}@${value.config.local.hostname}"; }; in mapAttrs' (_: platformHome) (importAll { root = ./home/platform; }); }; }