{ 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"; nixos-mailserver = { url = "gitlab:simple-nixos-mailserver/nixos-mailserver"; inputs.nixpkgs.follows = "nixpkgs"; }; nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; nix-zulip = { url = "git+https://git.afnix.fr/nix-zulip/nix-zulip"; flake = false; }; 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"; }; phoenix = { url = "github:celenityy/Phoenix"; inputs.nixpkgs.follows = "nixpkgs"; }; stylix = { url = "github:nix-community/stylix"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = { agenix, home-manager, impermanence, nixos-mailserver, nixpkgs, nix-zulip, noshell, nur, nvf, phoenix, stylix, ... }: let nix-zulip' = (import "${nix-zulip}/nix/default.nix" {}).output; machines = import ./machines.nix; configuration = machine: modules: nixpkgs.lib.nixosSystem { system = machine.system; specialArgs = {inherit machine;}; modules = modules ++ [ ./users.nix ./secrets.nix impermanence.nixosModules.impermanence agenix.nixosModules.default nixos-mailserver.nixosModule phoenix.nixosModules.default nix-zulip'.nixosModules.zulip { nixpkgs.overlays = [ agenix.overlays.default nur.overlays.default nix-zulip'.overlays.default ]; } ( if machine.hostname != "109-199-104-83" then {config, ...}: { imports = [./machines/${machine.hostname}/configuration.nix]; networking.domain = config.networking.hostName; # temporary fix } else {imports = machine.modules;} ) ]; }; configurationWithHomeManager = machine: (configuration machine [ home-manager.nixosModules.home-manager { 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; }; }