{ inputs = { agenix = { url = "github:ryantm/agenix"; inputs.nixpkgs.follows = "nixpkgs"; }; home-manager = { url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; impermanence.url = "github:nix-community/impermanence"; nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; noshell = { url = "github:viperML/noshell"; inputs.nixpkgs.follows = "nixpkgs"; }; nur = { url = "github:nix-community/NUR"; inputs.nixpkgs.follows = "nixpkgs"; }; nvf = { url = "github:notashelf/nvf"; inputs.nixpkgs.follows = "nixpkgs"; }; stylix = { url = "github:nix-community/stylix"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = { agenix, home-manager, impermanence, nixpkgs, noshell, nur, nvf, stylix, ... }: let machines = import ./machines.nix; configuration = machine: modules: nixpkgs.lib.nixosSystem { system = machine.system; specialArgs = {inherit machine;}; modules = modules ++ [ ./machines/${machine.hostname}/configuration.nix ./users.nix ./secrets.nix impermanence.nixosModules.impermanence agenix.nixosModules.default ]; }; configurationWithHomeManager = machine: (configuration machine [ home-manager.nixosModules.home-manager { nixpkgs.overlays = [ agenix.overlays.default nur.overlays.default ]; home-manager.useGlobalPkgs = true; home-manager.extraSpecialArgs = {inherit machine;}; home-manager.users = builtins.mapAttrs (name: value: value) ( nixpkgs.legacyPackages.${machine.system}.lib.genAttrs machine.users ( name: { imports = [ agenix.homeManagerModules.default stylix.homeModules.stylix nvf.homeManagerModules.default ./users/${name}/home.nix ]; } ) ); } noshell.nixosModules.default ]); in { nixosConfigurations = builtins.mapAttrs (hostname: value: configurationWithHomeManager value) machines; }; }