{ inputs, ... }: let inherit (inputs.self.mjallen-lib.system.common) mkExtendedLib mkNixpkgsConfig mkHomeConfigs mkHomeManagerConfig mkSpecialArgs ; in { # Example of creating NixOS configurations nixosConfigurations = let # Get all systems allSystems = inputs.self.mjallen-lib.file.scanSystems ../systems; # Filter for NixOS systems nixosSystems = inputs.self.mjallen-lib.file.filterNixOSSystems allSystems; in inputs.nixpkgs.lib.mapAttrs' ( name: { system, hostname, ... }: let # Create extended lib with mjallen-lib extendedLib = mkExtendedLib inputs.self inputs.nixpkgs; # Find matching home configurations for this system matchingHomes = mkHomeConfigs { flake = inputs.self; inherit system hostname; }; # Create home-manager configuration homeManagerConfig = mkHomeManagerConfig { inherit extendedLib inputs system matchingHomes ; isNixOS = true; }; in { name = hostname; value = inputs.nixpkgs.lib.nixosSystem { inherit system; # Pass special arguments to modules specialArgs = mkSpecialArgs { inherit inputs hostname extendedLib; username = "mjallen"; }; modules = [ # Set lib to extended lib { _module.args.lib = extendedLib; } # Configure nixpkgs { nixpkgs = { inherit system; } // mkNixpkgsConfig inputs.self; } # Import home-manager module inputs.home-manager.nixosModules.home-manager # Auto-inject home configurations homeManagerConfig # Import all nixos modules recursively ../${system}/${hostname} ] ++ (extendedLib.mjallen.file.importModulesRecursive ../modules/nixos); }; } ) nixosSystems; # Example of creating home-manager configurations homeConfigurations = let # Get all homes allHomes = inputs.self.mjallen-lib.file.scanHomes ../homes; in inputs.nixpkgs.lib.mapAttrs' ( name: { system, username, hostname, userAtHost, path, ... }: let # Create extended lib with mjallen-lib extendedLib = mkExtendedLib inputs.self inputs.nixpkgs; in { name = userAtHost; value = inputs.home-manager.lib.homeManagerConfiguration { pkgs = import inputs.nixpkgs { inherit system; inherit ((mkNixpkgsConfig inputs.self)) config overlays; }; extraSpecialArgs = { inherit inputs hostname username system ; inherit (inputs) self; lib = extendedLib; }; modules = [ # Set lib to extended lib { _module.args.lib = extendedLib; } # Import the home configuration path ] ++ (extendedLib.mjallen.file.importModulesRecursive ../modules/home); }; } ) allHomes; }