{ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11"; nixbsd.url = "github:nixos-bsd/nixbsd/main"; }; outputs = { self, nixpkgs, nixbsd, ... }: { nixosConfigurations = let sitesFiles = builtins.readDir ./sites; sitesNames = builtins.filter (name: builtins.pathExists ./sites/${name}/configuration.nix) (builtins.attrNames sitesFiles); systemTypes = { nixos = nixpkgs.lib.nixosSystem; nixbsd = nixbsd.lib.nixbsdSystem; }; systemName = name: builtins.replaceStrings ["\n"] [""] (builtins.readFile ./sites/${name}/system); configurations = builtins.listToAttrs (builtins.map (name: {inherit name; value = systemTypes.${systemName name} { modules = [ ./configuration.nix ./configuration-${systemName name}.nix ./sites/${name}/configuration.nix ]; }; }) sitesNames); in configurations; packages = let forBuildSystem = platform: let toBuildSystem = config: config.extendModules { modules = [ { nixpkgs.buildPlatform = "x86_64-linux"; } ]; }; toToplevel = extended: { system = extended.config.system.build.toplevel; }; toSystem = name: config: toToplevel (toBuildSystem config); configurations = builtins.mapAttrs toSystem self.nixosConfigurations; in configurations; buildPlatforms = [ "x86_64-linux" "aarch64-linux" "x86_64-freebsd" "aarch64-freebsd" ]; toPackagesList = platform: { name = platform; value = forBuildSystem platform; }; packagesList = builtins.map toPackagesList buildPlatforms; in builtins.listToAttrs packagesList; }; }