{ inputs = { agenix = { url = "github:ryantm/agenix"; inputs.nixpkgs.follows = "nixpkgs"; }; flake-parts = { url = "github:hercules-ci/flake-parts"; inputs.nixpkgs-lib.follows = "nixpkgs"; }; home-manager = { url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; impermanence.url = "github:nix-community/impermanence"; nixos-mailserver = { url = "gitlab:simple-nixos-mailserver/nixos-mailserver"; inputs.nixpkgs.follows = "nixpkgs"; }; 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"; inputs.flake-parts.follows = "flake-parts"; }; nvf = { url = "github:notashelf/nvf"; inputs.nixpkgs.follows = "nixpkgs"; inputs.flake-parts.follows = "flake-parts"; }; phoenix = { url = "github:celenityy/Phoenix"; inputs.nixpkgs.follows = "nixpkgs"; }; stylix = { url = "github:nix-community/stylix"; inputs.nixpkgs.follows = "nixpkgs"; inputs.flake-parts.follows = "flake-parts"; }; }; outputs = inputs @ { agenix, flake-parts, home-manager, impermanence, nixos-mailserver, nixpkgs, noshell, nur, nvf, phoenix, 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 nixos-mailserver.nixosModule phoenix.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 flake-parts.lib.mkFlake {inherit inputs;} (top @ { config, withSystem, moduleWithSystem, ... }: { systems = ["x86_64-linux"]; flake.nixosConfigurations = builtins.mapAttrs (hostname: value: configurationWithHomeManager value) machines; }); }